├── LICENSE ├── README.md ├── data ├── Human_M168_information.symbols.csv ├── cName_c70_m168.csv ├── cName_complete_mouse_c70_m168.csv ├── cName_glutaminolysis1_c17_m23.csv ├── cName_glutaminolysis2_c16_m20.csv ├── cName_iron_c8_m15.csv ├── cmMat_c70_m168.csv ├── cmMat_complete_mouse_c70_m168.csv ├── cmMat_glutaminolysis1_c17_m23.csv ├── cmMat_glutaminolysis2_c16_m20.csv ├── cmMat_iron_c8_m15.csv ├── module_gene_complete_mouse_m168.csv ├── module_gene_glutaminolysis1_m23.csv ├── module_gene_glutaminolysis2_m20.csv ├── module_gene_iron_m15.csv ├── module_gene_m168.csv ├── module_info_GLM1.csv └── module_info_GLM2.csv ├── doc └── Figure 1.png ├── input ├── GSE103322_full.csv ├── GSE72056_full.csv ├── Melissa_full.csv ├── TCGA_glutam.csv ├── mouse_example_cell_ident.RData ├── mouse_example_data.csv └── mouse_module_info.RData ├── manuscript ├── 01-scFEA.pdf └── 02-scFEA supplementary methods.pdf ├── output └── out ├── requirements ├── result ├── Figure 1.pdf ├── Figure 2.pdf ├── Figure 3.pdf ├── Figure 4.pdf ├── Figure 5.pdf ├── Figure 6.pdf └── Table 1.xlsx ├── scFEA_tutorial1.ipynb ├── scFEA_tutorial2.ipynb ├── src ├── ClassFlux.py ├── DatasetFlux.py ├── scFEA.py ├── scFEA_grad.py └── util.py └── supplementary data ├── Supplementary Figure S1.pdf ├── Supplementary Figure S2.pdf ├── Supplementary Figure S3.pdf ├── Supplementary Figure S4.pdf ├── Supplementary Figure S5.pdf ├── Supplementary Figure S6.pdf ├── Supplementary Figures and Tables.pdf ├── Supplementary Table S2.xlsx ├── Supplementary Table S3.xlsx └── Supplementary Table S4.xlsx /LICENSE: -------------------------------------------------------------------------------- 1 | scFEA can be used freely by academic groups for non-commercial purposes. The product is provided free of charge, and, therefore, on an " as is " basis, without warranty of any kind. 2 | 3 | If you plan to use scFEA in any for-profit application, you are required to obtain a separate license. 4 | To do so, please contact Wennan Chang ( chang534@purdue.edu ) at Purdue University. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## scFEA: A graph neural network model to estimate cell-wise metabolic using single cell RNA-seq data 2 | 3 | ## Change Log 4 | 5 | ### v1.0 6 | - Release scFEA initial version with full paper and installtion manual 7 | - Release human complete metabolic flux modules 8 | 9 | ### v1.1 10 | - Update full modules with metabolites names. 11 | - Update `data_dir` and `input_dir` two directories. `data_dir` is for model files and `input_dir` is for single cell input files. 12 | - Fix bugs in single cell imputation step by using [Magic](https://www.krishnaswamylab.org/projects/magic). 13 | 14 | ### v1.1.2 15 | - Release mouse complete metabolic flux modules 16 | - Release [tutorial](https://github.com/changwn/scFEA/blob/master/scFEA_tutorial1.ipynb) using jupyter. The tutorial contains full installation manual, installation testing, two examples of scFEA for human and mouse model respectively. It also includes R script for loading predicted flux result and a simple visialuzation demo. 17 | - Add parameter `output_flux_file` and `output_balance_file` which allows user define custom output file names for predicted flux and balance files. 18 | - Fix bug in *cName_c70_m168.csv* which contains `NA` value 19 | 20 | ### To be released soon 21 | If you have an interested topic, please feel free to open an [issue](https://github.com/changwn/scFEA/issues) or I can also merge your completed function into main branch 22 | - [ ] release scFEA sampling and fitting function for large dataset. For dataset which contains more than 10,000 single cells, the general pipeline is too time comsuming to get the result without a GPU acceleration. Instead, user should use sampling function to extract subset of cells for each cell type to train a model. Then use fitting function to predict metabolic flux on all cells. 23 | - [ ] tutorial of how to use sampling function and fitting function on a large dataset 24 | - [ ] evaluation of predicted flusome (we will provide a few of examples to show how to evaluate the goodness of fitting based on the convergence curves and cross validations) 25 | - [ ] cell clustering function based on predicted metabolic flux and graph structure, cell clustering visualization 26 | - [ ] perturbation analysis to identify high impact metabolic genes 27 | - [x] [tutorial](https://github.com/changwn/scFEA/blob/master/scFEA_tutorial2.ipynb) for embedding scFEA pipeline into a Seurat object and the Seurat pipeline for biological backgroud user who are familiar with Seurat 28 | - [ ] spatial transcriptomic data analysis (spatial dependent metabolic and biochemical changes) 29 | - [ ] more visualization functions 30 | - [ ] integrate downstream analysis and visualization related function into scFEA R package 31 | - [ ] scFEA web server which enable online analysis and figure generation (will be released in December 2021) 32 | 33 | 34 | 35 | ## Abstract 36 | 37 | The metabolic heterogeneity, and metabolic interplay between cells and their microenvironment have been known as significant contributors to disease treatment resistance. Our understanding of the intra-tissue metabolic heterogeneity and cooperation phenomena among cell populations is unfortunately quite limited, without a mature single cell metabolomics technology. To mitigate this knowledge gap, we developed a novel computational method, namely **scFEA** (**s**ingle **c**ell **F**lux **E**stimation **A**nalysis), to infer single cell fluxome from single cell RNA-sequencing (scRNA-seq) data. scFEA is empowered by a comprehensively reorganized human metabolic map as focused metabolic modules, a novel probabilistic model to leverage the flux balance constraints on scRNA-seq data, and a novel graph neural network based optimization solver. The intricate information cascade from transcriptome to metabolome was captured using multi-layer neural networks to fully capitulate the non-linear dependency between enzymatic gene expressions and reaction rates. We experimentally validated scFEA by generating an scRNA-seq dataset with matched metabolomics data on cells of perturbed oxygen and genetic conditions. Application of scFEA on this dataset demonstrated the consistency between predicted flux and metabolic imbalance with the observed variation of metabolites in the matched metabolomics data. We also applied scFEA on publicly available single cell melanoma and head and neck cancer datasets, and discovered different metabolic landscapes between cancer and stromal cells. The cell-wise fluxome predicted by scFEA empowers a series of downstream analysis including identification of metabolic modules or cell groups that share common metabolic variations, sensitivity evaluation of enzymes with regards to their impact on the whole metabolic flux, and inference of cell-tissue and cell-cell metabolic communications. 38 | 39 | ## The computational framework of scFEA 40 | 41 |

42 | 43 |

44 | 45 | ## The manuscript and supplementary methods 46 | 47 | Our paper and supplementary methods is available at [here](https://genome.cshlp.org/content/early/2021/07/22/gr.271205.120.abstract)! 48 | 49 | ## Supplementary figures and tables 50 | 51 | [donwload supplementary files](https://github.com/changwn/scFEA/tree/master/supplementary%20data) 52 | 53 | Supplementary Tables: 54 | 55 | 56 | 57 | - Table S1. Information of reorganized human metabolic map. 58 | 59 | - Table S2. Differentially expressed genes (DEG) and Pathway Enrichment (PE) results of the Pa03c cell line data. 60 | 61 | - Table S3. ssGSEA results, metabolomics data and clusters of metabolic modules derived in the Pa03c cell line data. 62 | 63 | - Table S4. Predicted cell type specific fluxome and metabolic imbalance in the melanoma and head and neck cancer data. 64 | 65 | 66 | Supplementary Figures: 67 | 68 | - Figure S1. qRT-PCR results. Mock and SCR are controls and siRef-1 are knock down of APEX1. 69 | 70 | - Figure S2. Correlation between metabolomic difference of the eight metabolites and differences of the averaged ssGSEA score of the modules using the eight metabolites as a substrate, in the APEX1-KD cells vs control. The x-axis is the difference of averaged ssGSEA score in the APEX1-KD cells vs control and the y-axis is the fold change of observed metabolomic profile. 71 | 72 | - Figure S3. The impact of each gene to the metabolic module 1-14 (glycolysis and TCA cycle modules) in the Pa03c cell line data. The x-axis represents genes and y-axis represents impacts. The larger absolute value on the y-axis indicates a stronger impact of the gene to the metabolic module. 73 | 74 | - Figure S4. tSNE plot of the cell clusters generated based on metabolic flux of the pancreatic cancer cell line data. 75 | 76 | - Figure S5. Boxplots of the predicted fluxes of Valine -> Succinyl-CoA, Isoleucine -> Succinyl-CoA, Isoleucine -> Acetyl-CoA, Glutathione -> Glycine + Cysteine, Glutathione -> Glutamate, Glutamate -> Glutamine and predicted changes in the abundance of Glutathione and Glutamate in the PV-ADSC of high stemness (HS) and more differentiation (MD). 77 | 78 | - Figure S6. Convergency of the flux balance loss and non-negative loss during the training of scFEA on the pancreatic cancer cell line data. The hyper parameters of the two loss were set differently to form four experiments. The flux balance loss, non-negative loss and total loss were blue, red and black-dash colored. 79 | 80 | 81 | ## Requirements and Installation 82 | 83 | scFEA is implemented by Python3. If you don't have python, please download [Anaconda](https://www.anaconda.com/download/#linux) with python 3 version. 84 | 85 | - torch >= 0.4.1 86 | - numpy >= 1.15.4 87 | - pandas >= 0.23.4 88 | - matplotlib >=3.0.2 89 | - magic >= 2.0.4 90 | 91 | Download scFEA: 92 | ``` 93 | git clone https://github.com/changwn/scFEA 94 | ``` 95 | 96 | Install requirements: 97 | ``` 98 | cd scFEA 99 | conda install --file requirements 100 | conda install pytorch torchvision -c pytorch 101 | pip install --user magic-impute 102 | ``` 103 | 104 | ## Usage 105 | 106 | You can see the input arguments for scFEA by help option: 107 | ``` 108 | python src/scFEA.py --help 109 | usage: scFEA.py [-h] [--data_dir ] 110 | [--input_dir ] [--res_dir ] 111 | [--test_file TEST_FILE] [--moduleGene_file MODULEGENE_FILE] 112 | [--stoichiometry_matrix STOICHIOMETRY_MATRIX] 113 | [--sc_imputation {True,False}] 114 | 115 | scFEA: A graph neural network model to estimate cell-wise metabolic flux using 116 | single cell RNA-seq data 117 | 118 | optional arguments: 119 | -h, --help show this help message and exit 120 | --data_dir 121 | The data directory for scFEA model files. 122 | --input_dir 123 | The data directory for single cell input data. 124 | --res_dir 125 | The data directory for result [output]. The output of scFEA includes two matrices, predicted metabolic flux and metabolites 126 | stress at single cell resolution. 127 | --test_file TEST_FILE 128 | The test SC file [input]. The input of scFEA is a single cell profile matrix, where row is gene and column is cell. Example 129 | datasets are provided in /data/ folder. The input can be raw counts or normalised counts. The logarithm would be performed 130 | if value larger than 30. 131 | --moduleGene_file MODULEGENE_FILE 132 | The table contains genes for each module. We provide human and mouse two models in scFEA. For human model, please use 133 | module_gene_m168.csv which is default. All candidate moduleGene files are provided in /data/ folder. 134 | --stoichiometry_matrix STOICHIOMETRY_MATRIX 135 | The table describes relationship between compounds and modules. Each row is an intermediate metabolite and each column is 136 | metabolic module. For human model, please use cmMat_171.csv which is default. All candidate stoichiometry matrices are 137 | provided in /data/ folder. 138 | --cName_file CNAME_FILE 139 | The name of compounds. The table contains two rows. First row is compounds name and second row is corresponding id. 140 | --sc_imputation {True,False} 141 | Whether perform imputation for SC dataset (recommend set to for 10x data). 142 | 143 | 144 | ``` 145 | 146 | **Run code with default parameters:** 147 | ``` 148 | python src/scFEA.py 149 | ``` 150 | 151 | **Other example:** 152 | ``` 153 | python src/scFEA.py --input_dir data --res_dir output --test_file Melissa_full.csv 154 | ``` 155 | 156 | 157 | ## Citation 158 | 159 | If you find our work helpful in your resarch or work, please cite us. 160 | 161 | 162 | N. Alghamdi, W. Chang, P. Dang, X. Lu, C. Wan, Z. Huang, J. Wang, M. Fishel, S. Cao, C. Zhang. scFEA: A graph neural network model to estimate cell-wise metabolic using single cell RNA-seq data, under review at *Genome Research*, 2020. 163 | 164 | 165 | 166 | ## Questions & Problems 167 | 168 | If you have any questions or problems, please feel free to open a new issue [here](https://github.com/changwn/scFEA/issues). We will fix the new issue ASAP. For code questions, please contact Wennan Chang. 169 | 170 | - [Wennan Chang](https://changwn.github.io/) 171 | (wnchang@iu.edu) 172 | 173 | For any other further questions or requests, please contact the Principle Investigator of BDRL lab. 174 | - [Prof. Chi Zhang](https://zcslab.github.io/) 175 | (czhang87@iu.edu) 176 | 177 | PhD candidate at [Biomedical Data Research Lab (BDRL)](https://zcslab.github.io/) , Indiana University School of Medicine 178 | -------------------------------------------------------------------------------- /data/Human_M168_information.symbols.csv: -------------------------------------------------------------------------------- 1 | "","Module_id","Compound_IN_name","Compound_IN_ID","Compound_OUT_name","Compound_OUT_ID","Supermodule_id" 2 | "M_1",1,"Glucose","C00267","G6P","C00668",1 3 | "M_2",2,"G6P","C00668","G3P","C00118",1 4 | "M_3",3,"G3P","C00118","3PD","C00197",1 5 | "M_4",4,"3PD","C00197","Pyruvate","C00022",1 6 | "M_5",5,"Pyruvate","C00022","Acetyl-Coa","C00024",1 7 | "M_6",6,"Pyruvate","C00022","Lactate","C00256",1 8 | "M_7",7,"Acetyl-CoA+Oxaloacetate","C00024+C00036","Citrate","C00158",1 9 | "M_8",8,"Citrate","C00158","2OG","C00026",1 10 | "M_9",9,"2OG","C00026","Succinyl-CoA","C00091",1 11 | "M_10",10,"Succinyl-CoA","C00091","Succinate","C00042",1 12 | "M_11",11,"Succinate","C00042","Fumarate","C00122",1 13 | "M_12",12,"Fumarate","C00122","Malate","C00149",1 14 | "M_13",13,"Malate","C00149","Oxaloacetate","C00036",1 15 | "M_14",14,"Pyruvate","C00022","Oxaloacetate","C00036",1 16 | "M_15",15,"3PD","C00197","Serine","C00065",2 17 | "M_16",16,"Serine","C00065","Pyruvate","C00022",2 18 | "M_17",17,"Serine","C00065","Cysteine","C00097",2 19 | "M_18",18,"Serine","C00065","Glycine","C00037",2 20 | "M_19",19,"Glycine","C00037","Creatine","C00300",2 21 | "M_20",20,"Glycine","C00037","Glyoxylate","C00048",2 22 | "M_21",21,"Choline","C00114","Glycine","C00037",2 23 | "M_22",22,"Glycine","C00037","Glycine-OUT","C00000",2 24 | "M_23",23,"Glycine","C00037","Glutathione","C00051",2 25 | "M_24",24,"Glutathione","C00051","Glycine + Cysteine","C00037+C00097",2 26 | "M_25",25,"Glutathione","C00051","glutamate","C00025",2 27 | "M_26",26,"Glutamate + Cysteine","C00025+C00097","Glutathione","C00051",2 28 | "M_27",27,"Serine","C00065","2-Aminoacrylate","C02218",2 29 | "M_28",28,"Serine","C00065","Methionine","C00073",2 30 | "M_29",29,"Cysteine","C00097","Pyruvate","C00022",2 31 | "M_30",30,"Methionine","C00073","Cysteine","C00097",2 32 | "M_31",31,"Methionine","C00073","Methionine-OUT","C00000",2 33 | "M_32",32,"Threonine","C00188","Propanoyl-CoA","C00100",2 34 | "M_33",33,"G3P","C00118","PRPP","C00119",3 35 | "M_34",34,"Acetyl-CoA","C00024","Fatty Acid","CC0001",4 36 | "M_35",35,"Fatty Acid","CC0001","Acetyl-CoA","C00024",4 37 | "M_36",36,"Aspartate","C00049","Pyrimidine","CC0002",5 38 | "M_37",37,"Aspartate","C00049","Aspartate-OUT","C00000",5 39 | "M_38",38,"Aspartate","C00049","Asparagine","C00152",5 40 | "M_39",39,"Aspartate","C00049","Fumarate","C00122",5 41 | "M_40",40,"Aspartate","C00049","Oxaloacetate","C00036",5 42 | "M_41",41,"Aspartate","C00049","B-Alanine","C00099",6 43 | "M_42",42,"Spermine","C00750","B-Alanine","C00099",6 44 | "M_43",43,"Histidine","C00135","B-Alanine","C00099",6 45 | "M_44",44,"B-Alanine","C00099","Acetyl-CoA","C00024",6 46 | "M_45",45,"Pyrimidine","CC0002","B-Alanine","C00099",6 47 | "M_46",46,"Propanoyl-CoA","C00100","Succinate","C00042",7 48 | "M_47",47,"Propanoyl-CoA","C00100","Acetyl-CoA","C00024",7 49 | "M_48",48,"Glutamate","C00025","Glutamine","C00064",8 50 | "M_49",49,"Glutamate","C00025","GABA","C00334",8 51 | "M_50",50,"GABA","C00334","Succinate","C00042",8 52 | "M_51",51,"Glutamate","C00025","2OG","C00026",8 53 | "M_52",52,"Histidine","C00135","glutamate","C00025",8 54 | "M_53",53,"Leucine","C00123","Acetyl-CoA","C00024",9 55 | "M_54",54,"Valine","C00183","Succinyl-CoA","C00091",9 56 | "M_55",55,"Isoleucine","C00407","Succinyl-CoA","C00091",9 57 | "M_56",56,"Isoleucine","C00407","Acetyl-CoA","C00024",9 58 | "M_57",57,"Tyrosine","C00082","Fumarate","C00122",9 59 | "M_58",58,"Tyrosine","C00082","Tyrosine-OUT","C00000",9 60 | "M_59",59,"Phenylalanine","C00079","Tyrosine","C00082",9 61 | "M_60",60,"lysine","C00047","Acetyl-CoA","C00024",9 62 | "M_61",61,"Putrescine","C00134","GABA","C00334",10 63 | "M_62",62,"Ornithine","C00077","Putrescine","C00134",10 64 | "M_63",63,"Arginine","C00062","Ornithine","C00077",10 65 | "M_64",64,"Arginine","C00062","Putrescine","C00134",10 66 | "M_65",65,"Argininosuccinate","C03406","Arginine + Fumarate","C00062+C00122",10 67 | "M_66",66,"Citruline + Aspartate","C00327+C00049","Argininosuccinate","C03406",10 68 | "M_67",67,"Ornithine","C00077","Proline","C00148",10 69 | "M_68",68,"Proline","C00148","Glyoxylate + pyruvate","C00048+C00022",10 70 | "M_69",69,"Putresine","C00134","Spermine","C00750",11 71 | "M_70",70,"Methionine","C00073","Spermine","C00750",11 72 | "M_71",71,"Glucose_in","C00000","Glucose","C00267",12 73 | "M_72",72,"Acetyl-CoA_in","C00000","Acetyl-CoA","C00024",12 74 | "M_73",73,"Citrate_in","C00000","Citrate","C00158",12 75 | "M_74",74,"2OG_in","C00000","2OG","C00026",12 76 | "M_75",75,"Succinate_in","C00000","Succinate","C00042",12 77 | "M_76",76,"Malate_in","C00000","Malate","C00149",12 78 | "M_77",77,"Oxaloacetate_in","C00000","Oxaloacetate","C00036",12 79 | "M_78",78,"Lactate","C00256","Lactate_out","C00000",12 80 | "M_79",79,"serine_in","C00000","serine","C00065",12 81 | "M_80",80,"Cysteine_in","C00000","Cysteine","C00097",12 82 | "M_81",81,"Glycine_in","C00000","Glycine","C00037",12 83 | "M_83",83,"Choline_in","C00000","Choline","C00114",12 84 | "M_84",84,"Threonine_in","C00000","Threonine","C00188",12 85 | "M_85",85,"Aspartate_in","C00000","Aspartate","C00049",12 86 | "M_87",87,"Pyrimidine_in","C00000","Pyrimidine","CC0002",12 87 | "M_88",88,"Histidine_in","C00000","Histidine","C00135",12 88 | "M_89",89,"B-Alanine_in","C00000","B-Alanine","C00099",12 89 | "M_90",90,"Propanoyl-CoA_in","C00000","Propanoyl-CoA","C00100",12 90 | "M_91",91,"glutamate_in","C00000","glutamate","C00025",12 91 | "M_92",92,"Glutamine_in","C00000","Glutamine","C00064",12 92 | "M_93",93,"GABA_in","C00000","GABA","C00334",12 93 | "M_94",94,"Tyrosine_in","C00000","Tyrosine","C00082",12 94 | "M_95",95,"phenylalanine_in","C00000","phenylalanine","C00079",12 95 | "M_96",96,"Valine_in","C00000","Valine","C00183",12 96 | "M_97",97,"Isoleucine_in","C00000","Isoleucine","C00407",12 97 | "M_98",98,"Leucine_in","C00000","Leucine","C00123",12 98 | "M_99",99,"Lysine_in","C00000","Lysine","C00047",12 99 | "M_100",100,"Arginine","C00000","Arginine","C00062",12 100 | "M_101",101,"Citrulline_in","C00000","Citrulline","C00327",12 101 | "M_102",102,"Ornithine_in","C00000","Ornithine","C00077",12 102 | "M_103",103,"Proline_in","C00000","Proline","C00148",12 103 | "M_105",105,"Fatty Acid_in","C00000","Fatty Acid","CC0001",12 104 | "M_106",106,"Glucose","C00267","Glucose-6-phosphate","C00668",13 105 | "M_107",107,"Glucose-6-phosphate","C00668","UDP-N-acetylglucosamine","C00043",13 106 | "M_108",108,"Glucose-6-phosphate","C00668","Glucose-1-phosphate","C00103",13 107 | "M_109",109,"Glucose-1-phosphate","C00103","UDP-glucuronic acid","C00167",13 108 | "M_110",110,"UDP-glucuronic acid+UDP-N-acetylglucosamine","C00167+C00043","Hyaluronic acid","C00518",13 109 | "M_111",111,"Glucose-1-phosphate","C00103","Glycogen","C00182",14 110 | "M_112",112,"UDP-N-acetylglucosamine","C00043","CMP-N-acetylneuraminate","C00128",15 111 | "M_113",113,"Acetyl-CoA","C00024","(E,E)-Farnesyl-PP","C00448",16 112 | "M_114",114,"(E,E)-Farnesyl-PP","C00448","Geranylgeranyl-PP","C00353",16 113 | "M_115",115,"(E,E)-Farnesyl-PP","C00448","Farnesal","C03461",16 114 | "M_116",116,"(E,E)-Farnesyl-PP","C00448","Ubiquinone","C00399",16 115 | "M_117",117,"(E,E)-Farnesyl-PP","C00448","Dolichyl phosphate","C00110",16 116 | "M_118",118,"Dolichyl phosphate","C00110","Dolichyl phosphate D-mannose","C03862",16 117 | "M_119",119,"Dolichyl phosphate","C00110","(GlcNAc)4 (Man)3 (Asn)1","G00015",16 118 | "M_120",120,"(Glc)3 (GlcNAc)2 (Man)9 (PP-Dol)1+Protein asparagine","G00008+C03021","(Glc)3 (GlcNAc)2 (Man)9 (Asn)1","G00009",16 119 | "M_121",121,"(Glc)3 (GlcNAc)2 (Man)9 (Asn)1","G00009","(GlcNAc)4 (Man)3 (Asn)1","G00015",16 120 | "M_122",122,"(GlcNAc)4 (Man)3 (Asn)1","G00015","(Gal)2 (GlcNAc)4 (LFuc)1 (Man)3 (Neu5Ac)2 (Asn)1","G00018",16 121 | "M_123",123,"(GlcNAc)4 (Man)3 (Asn)1","G00015","(GlcNAc)7 (Man)3 (Asn)1","G00022",16 122 | "M_124",124,"(GlcNAc)4 (Man)3 (Asn)1","G00015","(GlcNAc)5 (Man)3 (Asn)1","G00019",16 123 | "M_125",125,"Dolichyl phosphate D-mannose+Protein serine","C03862+C02189","(Gal)1 (GlcNAc)1 (Man)1 (Ser/Thr)1","G13084",17 124 | "M_126",126,"(Gal)1 (GlcNAc)1 (Man)1 (Ser/Thr)1","G13084","(Gal)1 (GlcNAc)1 (Man)1 (Neu5Ac)1 (Ser/Thr)1","G13085",17 125 | "M_127",127,"(Gal)1 (GlcNAc)1 (Man)1 (Ser/Thr)1","G13084","(Gal)1 (GlcA)1 (GlcNAc)1 (Man)1 (S)1 (Ser/Thr)1","G13088",17 126 | "M_128",128,"(Gal)1 (GlcNAc)1 (Man)1 (Ser/Thr)1","G13084","(Gal)1 (GlcNAc)1 (LFuc)1 (Man)1 (Ser/Thr)1","G13100",17 127 | "M_129",129,"Protein serine","C02189","(Gal)2 (GlcA)1 (Xyl)1 (Ser)1","G00157",18 128 | "M_130",130,"(Gal)2 (GlcA)1 (Xyl)1 (Ser)1","G00157","Chondroitin","C00401",18 129 | "M_131",131,"Chondroitin","C00401","Dermatan","C01490",18 130 | "M_132",132,"(Gal)2 (GlcA)1 (Xyl)1 (Ser)1","G00157","(Gal)2 (GlcA)2 (GlcNAc)2 (Xyl)1 (Ser)1","G00164",19 131 | "M_133",133,"PRPP+Glutamine","C00119+C00064","IMP","C00130",20 132 | "M_134",134,"5-Phosphoribosylamine","C03090","AICAR","C04677",20 133 | "M_135",135,"AICAR","C04677","IMP","C00130",20 134 | "M_136",136,"IMP","C00130","AMP","C00020",20 135 | "M_137",137,"IMP","C00130","XMP","C00655",20 136 | "M_138",138,"AMP","C00020","Deoxyadenosine","C00559",20 137 | "M_139",139,"AMP","C00020","Adenine","C00147",20 138 | "M_140",140,"ADP","C00008","Deoxyadenosine","C00559",20 139 | "M_141",141,"Deoxyadenosine","C00559","Adenine","C00147",20 140 | "M_142",142,"Deoxyadenosine","C00559","Hypoxanthine","C00262",20 141 | "M_143",143,"IMP","C00130","Hypoxanthine","C00262",20 142 | "M_144",144,"Hypoxanthine","C00262","Xanthine","C00385",20 143 | "M_145",145,"XMP","C00655","Xanthine","C00385",20 144 | "M_146",146,"Xanthine","C00385","Uric acid","C00366",20 145 | "M_147",147,"Xanthine","C00385","Guanine","C00242",20 146 | "M_148",148,"XMP","C00655","Guanine","C00242",20 147 | "M_149",149,"GMP","C00144","Guanine","C00242",20 148 | "M_150",150,"PRPP","C00119","UMP","C00105",21 149 | "M_151",151,"Orotidylic acid","C01103","UMP","C00105",21 150 | "M_152",152,"UMP","C00105","B-Alanine","C00099",21 151 | "M_153",153,"UMP","C00105","CDP","C00112",21 152 | "M_154",154,"Uracil","C00106","B-Alanine","C00099",21 153 | "M_155",155,"UTP","C00075","CDP","C00112",21 154 | "M_156",156,"CDP","C00112","Cytidine","C00475",21 155 | "M_157",157,"CDP","C00112","dCDP","C00705",21 156 | "M_158",158,"dCDP","C00705","Deoxycytidine","C00881",21 157 | "M_159",159,"dCMP","C00239","Deoxycytidine","C00881",21 158 | "M_160",160,"dCDP","C00705","dUMP","C00365",21 159 | "M_161",161,"dCDP","C00705","dCTP","C00458",21 160 | "M_162",162,"dUMP","C00365","Deoxyuridine","C00526",21 161 | "M_163",163,"dUMP","C00365","dTMP","C00364",21 162 | "M_164",164,"dTMP","C00364","Succinyl-CoA","C00091",21 163 | "M_165",165,"dTMP","C00364","dTTP","C00459",21 164 | "M_166",166,"Thymine","C00178","Succinyl-CoA","C00091",21 165 | "M_167",167,"(E,E)-Farnesyl-PP","C00448","Cholesterol","C00187",22 166 | "M_168",168,"Cholesterol","C00187","Chenodeoxycholate","C02528",22 167 | "M_169",169,"Cholesterol","C00187"," Steroid_hormone","CC0003",22 168 | "M_170",170,"XMP","C00655","GMP","C00144",20 169 | "M_171",171,"dCDP","C00705","dCMP","C00239",21 170 | -------------------------------------------------------------------------------- /data/cName_c70_m168.csv: -------------------------------------------------------------------------------- 1 | "AMP","Pyruvate","Acetyl-CoA","Glutamate","2OG","Oxaloacetate","Glycine","Succinate","UDP-N-acetylglucosamine","lysine","Aspartate","Glutathione","Arginine","Glutamine","Serine","Methionine","Ornithine","Phenylalanine","Tyrosine","Succinyl-CoA","Cysteine","B-Alanine","Propanoyl-CoA","Glucose-1-phosphate","UMP","Dolichyl phosphate","CDP","Choline","G3P","PRPP","Fumarate","Leucine","IMP","Putrescine","Histidine","GMP","Proline","Malate","Citrate","UDP-glucuronic acid","Valine","Cholesterol","Threonine","3PD","dCMP","Lactate","Hypoxanthine","Glucose","Citrulline","GABA","dTMP","dUMP","Xanthine","Chondroitin","Isoleucine","(E,E)-Farnesyl-PP","Deoxyadenosine","XMP","G6P","dCDP","Spermine","Argininosuccinate","Dolichyl phosphate D-mannose","AICAR","Fatty Acid","Pyrimidine","(Glc)3 (GlcNAc)2 (Man)9 (Asn)1","(GlcNAc)4 (Man)3 (Asn)1","(Gal)2 (GlcA)1 (Xyl)1 (Ser)1","(Gal)1 (GlcNAc)1 (Man)1 (Ser/Thr)1" 2 | "C00020","C00022","C00024","C00025","C00026","C00036","C00037","C00042","C00043","C00047","C00049","C00051","C00062","C00064","C00065","C00073","C00077","C00079","C00082","C00091","C00097","C00099","C00100","C00103","C00105","C00110","C00112","C00114","C00118","C00119","C00122","C00123","C00130","C00134","C00135","C00144","C00148","C00149","C00158","C00167","C00183","C00187","C00188","C00197","C00239","C00256","C00262","C00267","C00327","C00334","C00364","C00365","C00385","C00401","C00407","C00448","C00559","C00655","C00668","C00705","C00750","C03406","C03862","C04677","CC0001","CC0002","G00009","G00015","G00157","G13084" 3 | -------------------------------------------------------------------------------- /data/cName_complete_mouse_c70_m168.csv: -------------------------------------------------------------------------------- 1 | "AMP","Pyruvate","Acetyl-CoA","Glutamate","2OG","Oxaloacetate","Glycine","Succinate","UDP-N-acetylglucosamine","lysine","Aspartate","Glutathione","Arginine","Glutamine","Serine","Methionine","Ornithine","Phenylalanine","Tyrosine","Succinyl-CoA","Cysteine","B-Alanine","Propanoyl-CoA","Glucose-1-phosphate","UMP","Dolichyl phosphate","CDP","Choline","G3P","PRPP","Fumarate","Leucine","IMP","Putrescine","Histidine","GMP","Proline","Malate","Citrate","UDP-glucuronic acid","Valine","Cholesterol","Threonine","3PD","dCMP","Lactate","Hypoxanthine","Glucose","Citrulline","GABA","dTMP","dUMP","Xanthine","Chondroitin","Isoleucine","(E,E)-Farnesyl-PP","Deoxyadenosine","XMP","G6P","dCDP","Spermine","Argininosuccinate","Dolichyl phosphate D-mannose","AICAR","Fatty Acid","Pyrimidine","(Glc)3 (GlcNAc)2 (Man)9 (Asn)1","(GlcNAc)4 (Man)3 (Asn)1","(Gal)2 (GlcA)1 (Xyl)1 (Ser)1","(Gal)1 (GlcNAc)1 (Man)1 (Ser/Thr)1" 2 | "C00020","C00022","C00024","C00025","C00026","C00036","C00037","C00042","C00043","C00047","C00049","C00051","C00062","C00064","C00065","C00073","C00077","C00079","C00082","C00091","C00097","C00099","C00100","C00103","C00105","C00110","C00112","C00114","C00118","C00119","C00122","C00123","C00130","C00134","C00135","C00144","C00148","C00149","C00158","C00167","C00183","C00187","C00188","C00197","C00239","C00256","C00262","C00267","C00327","C00334","C00364","C00365","C00385","C00401","C00407","C00448","C00559","C00655","C00668","C00705","C00750","C03406","C03862","C04677","CC0001","CC0002","G00009","G00015","G00157","G13084" 3 | -------------------------------------------------------------------------------- /data/cName_glutaminolysis1_c17_m23.csv: -------------------------------------------------------------------------------- 1 | "Pyruvate","Acetyl-Coa","Glutamate","2OG","Oxaloacetate","Succinate","Glutamine","Succinyl-CoA","G3P","Fumarate","Malate","Citrate","Lactate","3PD","Glucose","GABA","G6P" 2 | "C00022","C00024","C00025","C00026","C00036","C00042","C00064","C00091","C00118","C00122","C00149","C00158","C00186","C00197","C00267","C00334","C00668" 3 | -------------------------------------------------------------------------------- /data/cName_glutaminolysis2_c16_m20.csv: -------------------------------------------------------------------------------- 1 | "Pyruvate","Acetyl-Coa","Glutamate","2OG","Oxaloacetate","Succinate","Glutamine","Succinyl-CoA","G3P","Fumarate","Malate","Citrate","Lactate","3PD","Glucose","G6P" 2 | "C00022","C00024","C00025","C00026","C00036","C00042","C00064","C00091","C00118","C00122","C00149","C00158","C00186","C00197","C00267","C00668" 3 | -------------------------------------------------------------------------------- /data/cName_iron_c8_m15.csv: -------------------------------------------------------------------------------- 1 | "Fe2_ecm","Fe2_cyto","Fe3_lyso","Heme_phago","Fe2_mito","Heme_mito","OH","Fe3_cyto" 2 | "F000001","F000002","F000003","F000004","F000005","F000006","F000007","F000008" 3 | -------------------------------------------------------------------------------- /data/cmMat_c70_m168.csv: -------------------------------------------------------------------------------- 1 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 2 | 0,0,0,1,-1,-1,0,0,0,0,0,0,0,-1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 3 | 0,0,0,0,1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 4 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 5 | 0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 6 | 0,0,0,0,0,0,-1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 7 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 8 | 0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 9 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 10 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 11 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 12 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 13 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 14 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 15 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 16 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 17 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 18 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 19 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 20 | 0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0 21 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,-1,0,0,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 22 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 23 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 24 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 25 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 26 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 27 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 28 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 29 | 0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 30 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 31 | 0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 32 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 33 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,-1,-1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 34 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,1,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 35 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 36 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 37 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 38 | 0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 39 | 0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 40 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 41 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 42 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,0,0 43 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 44 | 0,0,1,-1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 45 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,1 46 | 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 47 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 48 | -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 49 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 50 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 51 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,0,0,0,0,0,0 52 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1,-1,0,0,0,0,0,0,0,0 53 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 54 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 55 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 56 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0 57 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 58 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0 59 | 1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 60 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,-1,-1,0,0,0,0,0,0,0,0,0,-1 61 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 62 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 63 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 64 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 65 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 66 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 67 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 68 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 69 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 70 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 71 | -------------------------------------------------------------------------------- /data/cmMat_complete_mouse_c70_m168.csv: -------------------------------------------------------------------------------- 1 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 2 | 0,0,0,1,-1,-1,0,0,0,0,0,0,0,-1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 3 | 0,0,0,0,1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 4 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 5 | 0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 6 | 0,0,0,0,0,0,-1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 7 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 8 | 0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 9 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 10 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 11 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 12 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 13 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 14 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 15 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 16 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 17 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 18 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 19 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 20 | 0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0 21 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,-1,0,0,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 22 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 23 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 24 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 25 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 26 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 27 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 28 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 29 | 0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 30 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 31 | 0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 32 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 33 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,-1,-1,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 34 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,1,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 35 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 36 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 37 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 38 | 0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 39 | 0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 40 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 41 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 42 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,0,0 43 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 44 | 0,0,1,-1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 45 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,1 46 | 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 47 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 48 | -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 49 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 50 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 51 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,0,0,0,0,0,0 52 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1,-1,0,0,0,0,0,0,0,0 53 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 54 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 55 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 56 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0 57 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 58 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0 59 | 1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 60 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,-1,-1,0,0,0,0,0,0,0,0,0,-1 61 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 62 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 63 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 64 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 65 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 66 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 67 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 68 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 69 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 70 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 71 | -------------------------------------------------------------------------------- /data/cmMat_glutaminolysis1_c17_m23.csv: -------------------------------------------------------------------------------- 1 | 0,0,0,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 2 | 0,0,0,0,1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 3 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,-1,0,0,1,0 4 | 0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,1,0,0,0,0 5 | 0,0,0,0,0,0,-1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0 6 | 0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,1,0,0,0,0,0 7 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,1 8 | 0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0 9 | 0,1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0 10 | 0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0 11 | 0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0 12 | 0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 13 | 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0 14 | 0,0,1,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0 15 | -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 16 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0 17 | 1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 18 | -------------------------------------------------------------------------------- /data/cmMat_glutaminolysis2_c16_m20.csv: -------------------------------------------------------------------------------- 1 | 0,0,0,1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 2 | 0,0,0,0,1,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0 3 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0 4 | 0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,1,0,0,0 5 | 0,0,0,0,0,0,-1,0,0,0,0,0,1,0,0,0,0,0,0,0 6 | 0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0 7 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,1 8 | 0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0 9 | 0,1,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0 10 | 0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0 11 | 0,0,0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0 12 | 0,0,0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0,0 13 | 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,-1,0 14 | 0,0,1,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0 15 | -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 16 | 1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 17 | -------------------------------------------------------------------------------- /data/cmMat_iron_c8_m15.csv: -------------------------------------------------------------------------------- 1 | 1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0 2 | 0,1,0,1,0,1,-1,-1,-1,0,0,0,-1,0,0 3 | 0,0,1,-1,0,0,0,0,0,0,0,0,0,0,0 4 | 0,0,0,0,1,-1,0,0,0,0,0,0,0,0,0 5 | 0,0,0,0,0,0,0,0,1,-1,0,-1,0,0,0 6 | 0,0,0,0,0,0,0,0,0,1,-1,0,0,0,0 7 | 0,0,0,0,0,0,0,0,0,0,0,0,1,-1,0 8 | 0,0,0,0,0,0,0,0,0,0,0,0,1,0,-1 9 | -------------------------------------------------------------------------------- /data/module_gene_complete_mouse_m168.csv: -------------------------------------------------------------------------------- 1 | 1,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A 2 | M_1,Adpgk,G6pc,G6pc2,G6pc3,Galm,Gck,Hk1,Hk2,Hk3,Hkdc1 3 | M_2,Aldoa,Aldoart1,Aldob,Aldoc,Fbp1,Fbp2,Gpi1,Pfkl,Pfkm,Pfkp,Tpi1 4 | M_3,Bpgm,Coq2,Gapdh,LOC100043349,Gapdhs,Pgam1,Pgam2,Pgam1,Pgk1,Pgk2,Phb,Ppt1 5 | M_4,Bpgm,Coq2,Eno1,EG433182,Eno2,Eno3,Minpp1,Pck1,Pck2,Pgam1,Pgam2,Pgam1,Phb,Pklr,Pkm,Ppt1 6 | M_5,Dlat,Dld,Pdha1,Pdha2,Pdhb 7 | M_6,Ldha,Ldhal6a,Ldhal6b,Ldhb,Ldhc,Ldhd 8 | M_7,Acly,Cs,Csl 9 | M_8,Aco1,Aco2,Idh1,Idh2,Idh3a,Idh3b,Idh3g 10 | M_9,Dld,Dlst,Ogdh,Ogdhl 11 | M_10,Sucla2,Suclg1,Suclg2 12 | M_11,Sdha,Sdhb 13 | M_12,Fh1 14 | M_13,Mdh1,Mdh2 15 | M_14,Pcx 16 | M_15,Phgdh,Psat1,Psph 17 | M_16,Sds,Sdsl 18 | M_17,Cbs,Cth 19 | M_18,Agxt,Shmt1,Shmt2 20 | M_19,Gamt,Gatm 21 | M_20,Agxt,Agxt2,Dao,Dao1 22 | M_21,Aldh7a1,Bhmt,Chdh,Dmgdh,Pipox,Sardh 23 | M_22,Alas1,Alas2,Aoc2,Aoc3,Gcat,Gldc,Maoa,Maob 24 | M_23,Gss 25 | M_24,Anpep,Gclc,Ggt6,Gss,Lap3 26 | M_25,Ggct,A030007L17Rik,Ggt1,Ggt5,Ggtla1,Ggt6,Ggt7,Ggtl3,Gsta1,Gsta2,Gsta3,Gsta4,Gsta1,Gm10639,Gm3776,Gsta2,LOC100042295,Gsta3,Gstk1,Gstm2,Gstm3,Gstm1,Gstm7,Gstm5,Gstm4,Gstm1,Gsto1,Gsto2,Gstp1,Gstp2,Gstp3,Gstt2,Gstt2,Mgst1,Mgst2,Mgst3,Oplah 27 | M_26,Gclc,Gss 28 | M_27,Sds,Sdsl 29 | M_28,Bhmt,Bhmt2,Cbs,Kyat1,Kyat3,Mtr 30 | M_29,Cdo1,Cth,Got1,Got2,Kyat1,Kyat3,Mpst,Tst 31 | M_30,Ahcy,Ahcyl1,Ahcyl2,4631427C17Rik,Cbs,Cth,Dnmt1,Dnmt3a,Dnmt3b,Dnmt3l,Mat1a,Mat2a,Mat2b 32 | M_31,Adi1,Amd1,Apip,Enoph1,Il4i1,Mat1a,Mat2a,Mat2b,Mri1,2410018C20Rik,Mtap,Sms,LOC671878,Srm,Tat 33 | M_32,Bckdha,Bckdhb,Dbt,Dlat,Dld,Sds,Sdsl 34 | M_33,Aldoa,Aldoart1,Aldob,Aldoc,Fbp1,Fbp2,G6pdx,Gpi1,H6pd,Pfkl,Pfkm,Pfkp,Pgd,Pgls,Pgm2,Pgm1,Pgm1,Pgm2,Prps1,Prps1l1,Prps2,Rbks,Rpe,Rpe,Rpia,Taldo1,Tkt,Tktl1,Tktl2 35 | M_34,Acaca,Acacb,Acsbg1,Acsbg2,Acsl1,Acsl3,Acsl4,Acsl5,Acsl6,Fasn,Hsd11b2,Hsd17b1,Hsd17b12,Hsd17b2,Hsd17b6,Hsd17b7,H2-Ke6,Mast1,Mcat,Mecr,Olah,Oxsm,Pecr,Rdh10,Rdh1,Rdh16,Rdh16f2,Rdh19,Rdh7,Rdh9,BC089597,Rdh8,Rnf2,Slc27a2 36 | M_35,Acaa1a,Acaa1b,Acaa2,Acadl,Acadm,Acads,Acadsb,Acadvl,Acat1,Acat2,Acat3,Acox1,Acox3,Acsbg1,Acsbg2,Acsl1,Acsl3,Acsl4,Acsl5,Acsl6,Cpt1a,Cpt1b,Cpt1c,Cpt2,Echs1,Ehhadh,Gcdh,Hadh,Hadha,Hadhb,LOC623031,Hsd17b10,Hsd17b4,Slc27a2 37 | M_36,Cad,Dhodh 38 | M_37,Acy3,Aspa,Folh1,Naalad2,Naaladl1,Nat8l,Rimkla,BC057371 39 | M_38,Akp3,Alpi,Alppl2,Asns,Aspg,A530050D06Rik,Asrgl1 40 | M_39,Adsl,Adss,Adssl1,Asl,Ass1 41 | M_40,Got1,Got2,Il4i1 42 | M_41,Azin2,Gad1,Gad2,Gadl1 43 | M_42,Aldh1a3,Aldh1b1,Aldh2,Aldh3a1,Aldh3a2,Aldh3b1,Aldh3b2,Aldh3b3,Aldh7a1,Aldh9a1,Aoc2,Aoc3,Smox 44 | M_43,Carns1,Cndp1,Cndp2 45 | M_44,Abat,Aldh6a1 46 | M_45,Dpyd,Dpys,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Pnp,Pnp2,Tk1,Tk2,Tymp,Ecgf1,Uck1,Uck2,Uckl1,Upb1,Upp1,Upp2,Uprt 47 | M_46,Echdc1,Mcee,Mut,Pcca,Pccb,Sucla2,Suclg1,Suclg2 48 | M_47,Acaca,Acacb,Acads,Acox1,Acox3,Echs1,Ehhadh,Hadha,Mlycd 49 | M_48,Gls,Gls2,Glul 50 | M_49,Gad1,Gad2 51 | M_50,Abat,Aldh5a1 52 | M_51,Glud1,Glud1 53 | M_52,Amdhd1,Ftcd,Hal,Uroc1 54 | M_53,Aacs,Acadm,Acat1,Acat2,Acat3,Auh,Bcat1,Bcat2,Bckdha,Bckdhb,Dbt,Dld,Echs1,Ehhadh,Hadha,Hmgcl,Hmgcs1,LOC100040592,Hmgcs2,Ivd,Mccc1,Mccc2,Oxct1,Oxct2b 55 | M_54,Abat,Acad8,Acadm,Acads,Acadsb,Acsf3,BC021611,Agxt2,Aldh1b1,Aldh2,Aldh3a2,Aldh7a1,Aldh9a1,Aox1,Bcat1,Bcat2,Bckdha,Bckdhb,Dbt,Dld,Echs1,Ehhadh,Hadh,Hadha,Hibadh,Hibch,Hsd17b10,Mut 56 | M_55,Acaa1a,Acaa1b,Acaa2,Acadm,Acads,Acadsb,Bcat1,Bcat2,Bckdha,Bckdhb,Dbt,Dld,Echs1,Ehhadh,Hadh,Hadha,Hadhb,LOC623031,Hsd17b10,Il4i1,Mcee,Mut,Pcca,Pccb 57 | M_56,Acaa1a,Acaa1b,Acaa2,Acadm,Acads,Acadsb,Bcat1,Bcat2,Bckdha,Bckdhb,Dbt,Dld,Echs1,Ehhadh,Hadh,Hadha,Hadhb,LOC623031,Hsd17b10,Il4i1 58 | M_57,Fah,Got1,Got2,Gstz1,Hgd,Hpd,Il4i1,Mif,Tat 59 | M_58,Aldh1a3,Aldh3a1,Aldh3b1,Aldh3b2,Aldh3b3,Aoc2,Aoc3,Ddc,Maoa,Maob,Th,Tpo,Tyr 60 | M_59,Pah 61 | M_60,Aadat,Aass,Acat1,Acat2,Acat3,Aldh7a1,Dld,Echs1,Ehhadh,Gcdh,Hadh,Hadha,Hsd17b10,Hsd17b4,Hykk,Phykpl 62 | M_61,Aldh1b1,Aldh2,Aldh3a2,Aldh7a1,Aldh9a1,Aoc1 63 | M_62,Odc1 64 | M_63,Arg1,Arg2 65 | M_64,Agmat,Azin2 66 | M_65,Asl 67 | M_66,Ass1 68 | M_67,Oat,Prodh,Prodh2,Pycr1,Pycr2,Pycrl 69 | M_68,Aldh4a1,Got1,Got2,Hoga1,Prodh2,Pycr1,Pycr2,Pycrl 70 | M_69,Smox,Sms,LOC671878,Srm 71 | M_70,Amd1,Mat1a,Mat2a,Mat2b,Smox,Sms,LOC671878,Srm 72 | M_71,Slc2a1,Slc2a2,Slc2a3,Slc2a4 73 | M_72,Slc33a1 74 | M_73,Slc13a5,Slc25a1 75 | M_74,Slc25a11 76 | M_75,Slc13a3,Slc25a10 77 | M_76,Slc25a10,Slc25a11 78 | M_77,Slc25a21 79 | M_78,Slc16a1,Slc16a3,Slc16a4 80 | M_79,Slc1a4,Slc1a5,Slc38a2,Slc38a4,Slc38a5,Slc7a10 81 | M_80,Slc1a4,Slc1a5,Slc38a1,Slc38a2,Slc38a4,Slc7a10,Slc7a11,Slc7a7 82 | M_81,Slc6a5,Slc6a9 83 | M_83,Slc5a7 84 | M_84,Slc1a4,Slc7a8 85 | M_85,Slc1a3,Slc1a6 86 | M_87,Slc29a1,Slc29a2 87 | M_88,Slc15a4 88 | M_89,Slc6a6 89 | M_90,Slc27a1 90 | M_91,Slc17a6,Slc17a7,Slc17a8,Slc1a1,Slc1a2,Slc1a3,Slc1a5,Slc1a6,Slc1a7 91 | M_92,Slc1a5 92 | M_93,Slc32a1,Slc6a1,Slc6a11,Slc6a12,Slc6a13 93 | M_94,Slc7a5,Slc7a8 94 | M_95,Slc7a8 95 | M_96,Slc6a15 96 | M_97,Slc6a15 97 | M_98,Slc6a15,Slc7a5,Slc7a6 98 | M_99,Slc25a29,Slc38a4,Slc66a1 99 | M_100,Slc25a29,Slc7a1,Slc7a2 100 | M_101,Slc25a15 101 | M_102,Slc25a15,Slc25a15p1,Slc25a2,Slc25a29 102 | M_103,Slc36a1,Slc6a20a,Slc6a20b,Xtrp3s1,Slc6a7 103 | M_105,Slc27a1,Slc27a2,Slc27a3,Slc27a4,Slc27a5,Slc27a6 104 | M_106,Gck,Hk1,Hk2,Hk3,Hkdc1 105 | M_107,Amdhd2,Gfpt1,Gfpt2,Gnpda1,Gnpda2,Gnpnat1,Gpi1,Pgm3,Uap1,Uap1l1 106 | M_108,Pgm2,Pgm1,Pgm1,Pgm2 107 | M_109,Ugdh,Ugp2 108 | M_110,Has1,Has2,Has3 109 | M_111,Gys1,Gys2,Pygb 110 | M_112,Cmas,Gne,Nanp,Nans,Tspan31 111 | M_113,Acat1,Acat2,Acat3,Fdps,Ggps1,Hmgcr,Hmgcs1,LOC100040592,Hmgcs2,Idi1,Idi2,Mvd,Mvk,Pmvk 112 | M_114,Fdps,Ggps1 113 | M_115,Fnta,Fntb,Icmt,Pcyox1,Rce1,Zmpste24 114 | M_116,Clk1,Coq2,Coq3,Coq5,Coq6,Coq7,Pdss1,Pdss2,Phb,Ppt1 115 | M_117,Alg11,Dhdds,Dolk,Srd5a1,Srd5a2,Srd5a3,Srd5a2l 116 | M_118,Dpm1 117 | M_119,Alg10b,Alg10b,Alg5,Alg6,Alg8,Ganab,Man1a,Man1a2,Man1b1,Man1c1,Man2a1,Man2a2,Mgat1,Mgat2,Mogs,Gcs1,Stt3a,Stt3b 118 | M_120,Stt3a,Stt3b 119 | M_121,Ganab,Man1a,Man1a2,Man1b1,Man1c1,Man2a1,Man2a2,Mgat1,Mgat2,Mogs,Gcs1 120 | M_122,Abo,B4galt1,B4galt2,B4galt3,Fut8,St6gal1,St6gal2 121 | M_123,Mgat4a,Mgat4b,Mgat4c 122 | M_124,Mgat3 123 | M_125,Abo,B3glct,B4galt1,B4galt2,B4galt3,Fut4,Fut7,Mgat5b,Poglut1,Pomgnt1,Pomt1,Pomt2 124 | M_126,St3gal2,St3gal3,St3gal6 125 | M_127,B3gat2,Chst10 126 | M_128,Fut9 127 | M_129,B3galt6,B3gat3,B4galt7,Xylt1,Xylt2 128 | M_130,Chpf,D1Bwg1363e,Chpf2,Chsy1,Chsy3,4833446K15Rik,Csgalnact1,4732435N03Rik,Csgalnact2,Galnact2,Dse 129 | M_131,Dse 130 | M_132,Ext1,Ext2,Extl1,Extl2,Extl3 131 | M_133,Adsl,Atic,Cant1,Entpd1,Entpd3,Entpd4,Gm21685,Entpd5,Entpd6,Entpd8,Gart,Nme1,Gm5566,EG433968,Nme2,Nme3,Nme4,Nme5,Nme6,Nme7,Nudt16,Nudt5,Paics,Pfas,Ppat 132 | M_134,Adsl,Gart,Paics,Pfas 133 | M_135,Atic,Cant1,Entpd1,Entpd3,Entpd4,Gm21685,Entpd5,Entpd6,Entpd8,Nme1,Gm5566,EG433968,Nme2,Nme3,Nme4,Nme5,Nme6,Nme7,Nudt16,Nudt5 134 | M_136,Adsl,Adss,Adssl1,Ampd1,Ampd2,Ampd3 135 | M_137,Impdh1,Impdh2,LOC100042069 136 | M_138,Ak1,Ak2,Ak3,Ak4,Ak5,Ak6,Ak7,Ak8,Entpd1,Entpd3,Entpd8,F9,Nme1,Gm5566,EG433968,Nme2,Nme3,Nme4,Nme5,Nme6,Nme7,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Pklr,Pkm,Rrm1,Rrm2,Rrm2b 137 | M_139,Adk,Dck,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Pnp,Pnp2 138 | M_140,Ak1,Ak2,Ak4,Ak5,Ak7,Ak8,Nme1,Gm5566,EG433968,Nme2,Nme3,Nme4,Nme5,Nme6,Nme7,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Pklr,Pkm,Rrm1,Rrm2,Rrm2b 139 | M_141,Pnp,Pnp2 140 | M_142,Ada,Pnp,Pnp2 141 | M_143,Ada,Hprt,Hprt1,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Pnp,Pnp2 142 | M_144,Xdh 143 | M_145,Hprt,Hprt1,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Nudt2,Nudt5,Pnp,Pnp2 144 | M_146,Xdh 145 | M_147,Gda 146 | M_148,Aprt,Gmps,Hprt,Hprt1,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Nudt2,Nudt5,Pnp,Pnp2 147 | M_149,Aprt,Hprt,Hprt1,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Pnp,Pnp2 148 | M_150,Umps 149 | M_151,Umps 150 | M_152,Dpyd,Dpys,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Uck1,Uck2,Uckl1,Upb1,Upp1,Upp2,Uprt 151 | M_153,Cant1,Cmpk1,Cmpk,Cmpk2,Tyki,Ctps,Ctps2,Entpd1,Entpd3,Entpd4,Gm21685,Entpd5,Entpd6,Entpd8,Nme1,Gm5566,EG433968,Nme2,Nme3,Nme4,Nme5,Nme6,Nme7 152 | M_154,Dpyd,Dpys,Upb1 153 | M_155,Ctps,Ctps2,Entpd1,Entpd3,Entpd8,Nme1,Gm5566,EG433968,Nme2,Nme3,Nme4,Nme5,Nme6,Nme7 154 | M_156,Cmpk1,Cmpk,Cmpk2,Tyki,Entpd1,Entpd3,Entpd8,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Uck1,Uck2,Uckl1 155 | M_157,Rrm1,Rrm2,Rrm2b 156 | M_158,Cmpk1,Cmpk,Cmpk2,Tyki,Dck,Dctpp1,2410015N17Rik,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m 157 | M_159,Dck,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m 158 | M_160,Cmpk1,Cmpk,Cmpk2,Tyki,Dctd,Dctpp1,2410015N17Rik 159 | M_161,Nme1,Gm5566,EG433968,Nme2,Nme3,Nme4,Nme5,Nme6,Nme7 160 | M_162,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Tk1,Tk2 161 | M_163,Tyms 162 | M_164,Acsf3,BC021611,Agxt2,Aldh1b1,Aldh2,Aldh3a2,Aldh7a1,Aldh9a1,Aox1,Dpyd,Dpys,Mut,Nt5c,Nt5c1a,Nt5c1b,Nt5c1b,Nt5c2,Nt5c3,Nt5c3b,Nt5e,Nt5m,Tk1,Tk2,Tymp,Ecgf1,Upb1 163 | M_165,Dtymk,Entpd1,Entpd3,Entpd8,Nme1,Gm5566,EG433968,Nme2,Nme3,Nme4,Nme5,Nme6,Nme7 164 | M_166,Acsf3,BC021611,Agxt2,Aldh1b1,Aldh2,Aldh3a2,Aldh7a1,Aldh9a1,Aox1,Dpyd,Dpys,Mut,Upb1 165 | M_167,Cyp51,Dhcr24,Dhcr7,Ebp,Fdft1,Hsd17b1,Hsd17b12,Hsd17b2,Hsd17b6,Hsd17b7,H2-Ke6,Lss,Msmo1,Nsdhl,Rnf2,Sc5d,Sqle,Tm7sf2 166 | M_168,Acot1,Acot3,Acot2,Acot2,Acot1,Acot4,Acot7,Acot8,Acox2,Akr1c6,Akr1d1,Amacr,Baat,Ch25h,Cyp27a1,Cyp39a1,Cyp46a1,Cyp7a1,Cyp7b1,Cyp8b1,Hsd11b2,Hsd17b4,Hsd3b7,Rdh10,Rdh1,Rdh16,Rdh16f2,Rdh19,Rdh7,Rdh9,BC089597,Rdh8,Scp2,Slc27a5 167 | M_169,Akr1c21,Akr1c21,Akr1c18,Akr1c6,Akr1d1,Alg11,Comt,Cyp11a1,Cyp11b1,Cyp11b2,Cyp11b1,Cyp11b2,Cyp17a1,Cyp19a1,Cyp1a1,Cyp1a2,Cyp1b1,Cyp2a4,Cyp2a5,Cyp2a4,Cyp2a5,Cyp2a4,Cyp2a5,Cyp2b10,Cyp2c55,Cyp2c50,Cyp2c29,Cyp2c38,Cyp2c39,Cyp2c65,Cyp2c65,Cyp2c66,Cyp2d22,Cyp2e1,Cyp2f2,Cyp2j6,Cyp2s1,Cyp3a41,EG622127,Cyp3a11,Cyp3a16,Cyp3a41a,Cyp3a41b,Cyp3a44,Cyp3a13,Cyp4b1,Cyp4f15,EG208285,Cyp4x1,Cyp4z1,Hsd11b1,Hsd11b2,Hsd17b1,Hsd17b12,Hsd17b2,Hsd17b3,Hsd17b6,Hsd17b7,H2-Ke6,Gm10681,Gm4450,Hsd3b1,Hsd3b2,Hsd3b3,Hsd3b4,Hsd3b5,Hsd3b6,Gm10681,Gm4450,Hsd3b1,Hsd3b2,Hsd3b3,Hsd3b4,Hsd3b5,Hsd3b6,Rdh10,Rdh1,Rdh16,Rdh16f2,Rdh19,Rdh7,Rdh9,BC089597,Rdh8,Rnf2,Srd5a1,Srd5a2,Srd5a3,Srd5a2l,Sts,Sult1e1,Sult2b1,Ugt1a1,Ugt1a10,Ugt1a9,Ugt1a8,Ugt1a2,Ugt1a5,Ugt1a5,Ugt1a5,Ugt1a6a,Ugt1a6b,Ugt1a10,Ugt1a9,Ugt1a8,Ugt1a10,Ugt1a9,Ugt1a8,Ugt1a10,Ugt1a9,Ugt1a8,Ugt2a1,Ugt2a2,Ugt2a3,Ugt2b34,Ugt2b11,Ugt2b36,Ugt2b1,Ugt2b38,Ugt2b37,Ugt2b38,Ugt2b5,Ugt2b1,Ugt2b35,Ugt2b36 168 | M_170,Gmps 169 | M_171,Cmpk1,Cmpk,Cmpk2,Tyki,Dctpp1,2410015N17Rik 170 | -------------------------------------------------------------------------------- /data/module_gene_glutaminolysis1_m23.csv: -------------------------------------------------------------------------------- 1 | 1,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A 2 | M_1,ADPGK,G6PC,G6PC2,G6PC3,GALM,GCK,HK1,HK2,HK3,HKDC1 3 | M_2,ALDOA,ALDOB,ALDOC,FBP1,FBP2,GPI,PFKL,PFKM,PFKP,TPI1 4 | M_3,BPGM,CL640,COQ10D1,COQ2,GAPDH,GAPDHS,MSA1,PGAM1,PGAM2,PGAM4,PGK1,PGK2,PHB,PPT 5 | M_4,BPGM,CL640,COQ10D1,COQ2,ENO1,ENO2,ENO3,HIPER1,MINPP1,MINPP2,MIPP,MSA1,PCK1,PCK2,PGAM1,PGAM2,PGAM4,PHB,PKLR,PKM,PPT 6 | M_5,DLAT,DLD,DLDD,DLDH,E3,GCSL,LAD,PDHA1,PDHA2,PDHB,PHE3 7 | M_6,LDHA,LDHAL6A,LDHAL6B,LDHB,LDHC,LDHD 8 | M_7,ACLY,CS 9 | M_8,ACO1,ACO2,IDH1,IDH2,IDH3A,IDH3B,IDH3G 10 | M_9,DLD,DLDD,DLDH,DLST,E3,GCSL,LAD,OGDH,OGDHL,PHE3 11 | M_10,SUCLA2,SUCLG1,SUCLG2 12 | M_11,SDHA,SDHB 13 | M_12,FH 14 | M_13,MDH1,MDH2 15 | M_14,PHGDH,PSAT1,PSPH 16 | M_15,6PGD,ALDOA,ALDOB,ALDOC,FBP1,FBP2,G6PD,G6PD1,GPI,H6PD,PFKL,PFKM,PFKP,PGD,PGLS,PGM1,PGM2,PRPS1,PRPS1L1,PRPS2,RBKS,RPE,RPEL1,RPIA,TALDO1,TKT,TKTL1,TKTL2 17 | M_16,GLS,GLS2,GLUL 18 | M_17,GAD1,GAD2 19 | M_18,ABAT,ALDH5A1 20 | M_19,GLUD1,GLUD2,GOT1,GOT2,GPT 21 | M_20,SLC2A1,SLC2A2,SLC2A3,SLC2A4 22 | M_21,SLC16A1,SLC16A3,SLC16A4 23 | M_22,SLC1A1,SLC1A2,SLC1A3,SLC1A5,SLC1A6,SLC1A7,SLC17A6,SLC17A8,SLC17A7 24 | M_23,SLC1A5 25 | -------------------------------------------------------------------------------- /data/module_gene_glutaminolysis2_m20.csv: -------------------------------------------------------------------------------- 1 | 1,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A 2 | M_1,ADPGK,G6PC,G6PC2,G6PC3,GALM,GCK,HK1,HK2,HK3,HKDC1 3 | M_2,ALDOA,ALDOB,ALDOC,FBP1,FBP2,GPI,PFKL,PFKM,PFKP,TPI1 4 | M_3,BPGM,CL640,COQ10D1,COQ2,GAPDH,GAPDHS,MSA1,PGAM1,PGAM2,PGAM4,PGK1,PGK2,PHB,PPT 5 | M_4,BPGM,CL640,COQ10D1,COQ2,ENO1,ENO2,ENO3,HIPER1,MINPP1,MINPP2,MIPP,MSA1,PCK1,PCK2,PGAM1,PGAM2,PGAM4,PHB,PKLR,PKM,PPT 6 | M_5,DLAT,DLD,DLDD,DLDH,E3,GCSL,LAD,PDHA1,PDHA2,PDHB,PHE3 7 | M_6,LDHA,LDHAL6A,LDHAL6B,LDHB,LDHC,LDHD 8 | M_7,ACLY,CS 9 | M_8,ACO1,ACO2,IDH1,IDH2,IDH3A,IDH3B,IDH3G 10 | M_9,DLD,DLDD,DLDH,DLST,E3,GCSL,LAD,OGDH,OGDHL,PHE3 11 | M_10,SUCLA2,SUCLG1,SUCLG2 12 | M_11,SDHA,SDHB 13 | M_12,FH 14 | M_13,MDH1,MDH2 15 | M_14,PHGDH,PSAT1,PSPH 16 | M_15,6PGD,ALDOA,ALDOB,ALDOC,FBP1,FBP2,G6PD,G6PD1,GPI,H6PD,PFKL,PFKM,PFKP,PGD,PGLS,PGM1,PGM2,PRPS1,PRPS1L1,PRPS2,RBKS,RPE,RPEL1,RPIA,TALDO1,TKT,TKTL1,TKTL2 17 | M_16,GLS,GLS2,GLUL 18 | M_17,GLUD1,GLUD2,GOT1,GOT2,GPT 19 | M_18,SLC2A1,SLC2A2,SLC2A3,SLC2A4 20 | M_19,SLC16A1,SLC16A3,SLC16A4 21 | M_20,SLC1A5 22 | -------------------------------------------------------------------------------- /data/module_gene_iron_m15.csv: -------------------------------------------------------------------------------- 1 | 1,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A 2 | M_1,STEAP1,STEAP2,STEAP3,STEAP4,STEAP1B,FRRS1,CYBRD1 3 | M_2,TF,TFRC,TFR2 4 | M_3,SLC11A2,SLC39A14 5 | M_4,STEAP1,STEAP2,STEAP3,STEAP4,STEAP5 6 | M_5,FLVCR2,UNC119,SLC46A1,HPX 7 | M_6,SLC48A1,POR 8 | M_7,FTL,FTH1 9 | M_8,SLC40A1 10 | M_9,SLC25A37 11 | M_10,HNF1A,FECH,UROD,HMBS,UROS,ALAS1,ALAD,ALAS2,TSPO,CPOX,SLC11A2,PPOX,COX10,NFE2L1,FXN,IBA57,COX15,SLC25A38,SLC25A39,TMEM14C,ATPIF1 12 | M_11,FLVCR1,ABCB7,ABCB6,ABCG2 13 | M_12,NDUFS7,TYW1,TYW1B,FDX1L,ISCU,NDUFS1,ELP3,RSAD2,NFU1,ABCE1,NDUFS8,CIAPIN1,GLRX3,RPS3,NUBP1,ABAT,FXN,ISCA2,ISCA1,NARFL,NARF,NFS1 14 | M_13,SOD1,SOD2,SOD3,GPX1,GPX2,GPX3,GPX4,GPX5 15 | M_14,ANAPC11,BRCA1,CDC20,CDC34,POMP,PRPF19,PSMA1,PSMA2,PSMA3,PSMA4,PSMA5,PSMA6,PSMA7,PSMB1,PSMB2,PSMB3,PSMB4,PSMB5,PSMB7,PSMC1,PSMC3,PSMC4,PSMC5,PSMC6,PSMD13,PSMD14,PSMD3,PSMD4,PSMD8,PSME2,RNF7,SHFM1,TCEB1,TCEB2,UBE2C,UBE2J2,UBE2M,UBE2S,CPSF3,CPSF4,DAZAP1,ENO1,EXOSC1,EXOSC2,EXOSC4,EXOSC5,EXOSC7,EXOSC8,EXOSC9,LSM2,LSM4,LSM5,LSM7,MAGOHB,MAGOH,NAA38,NCBP1,NXT1,PABPN1,PNPT1,PPP1CA,PPP2R3B,RNPS1,THOC4,WIBG 16 | M_15,FTL,FTH1 17 | -------------------------------------------------------------------------------- /data/module_gene_m168.csv: -------------------------------------------------------------------------------- 1 | 1,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A 2 | M_1,ADPGK,G6PC,G6PC2,G6PC3,GALM,GCK,HK1,HK2,HK3,HKDC1 3 | M_2,ALDOA,ALDOB,ALDOC,FBP1,FBP2,GPI,PFKL,PFKM,PFKP,TPI1 4 | M_3,BPGM,COQ2,GAPDH,GAPDHS,PGAM1,PGAM2,PGAM4,PGK1,PGK2,PHB,PPT1 5 | M_4,BPGM,COQ2,ENO1,ENO2,ENO3,MINPP1,PCK1,PCK2,PGAM1,PGAM2,PGAM4,PHB,PKLR,PKM,PPT1 6 | M_5,DLAT,DLD,PDHA1,PDHA2,PDHB 7 | M_6,LDHA,LDHAL6A,LDHAL6B,LDHB,LDHC,LDHD 8 | M_7,ACLY,CS 9 | M_8,ACO1,ACO2,IDH1,IDH2,IDH3A,IDH3B,IDH3G 10 | M_9,DLD,DLST,OGDH,OGDHL 11 | M_10,SUCLA2,SUCLG1,SUCLG2 12 | M_11,SDHA,SDHB 13 | M_12,FH 14 | M_13,MDH1,MDH2 15 | M_14,PC 16 | M_15,PHGDH,PSAT1,PSPH 17 | M_16,SDS,SDSL 18 | M_17,CBS,CTH 19 | M_18,AGXT,SHMT1,SHMT2 20 | M_19,GAMT,GATM 21 | M_20,AGXT,AGXT2,DAO 22 | M_21,ALDH7A1,BHMT,CHDH,DMGDH,PIPOX,SARDH 23 | M_22,ALAS1,ALAS2,AOC2,AOC3,GCAT,GLDC,MAOA,MAOB 24 | M_23,GSS 25 | M_24,ANPEP,GCLC,GGT6,GSS,LAP3 26 | M_25,GGCT,GGT1,GGT5,GGT6,GGT7,GSTA1,GSTA2,GSTA3,GSTA4,GSTA5,GSTK1,GSTM1,GSTM2,GSTM3,GSTM4,GSTM5,GSTO1,GSTO2,GSTP1,GSTT2,GSTT2B,MGST1,MGST2,MGST3,OPLAH 27 | M_26,GCLC,GSS 28 | M_27,SDS,SDSL 29 | M_28,BHMT,BHMT2,CBS,KYAT1,KYAT3,MTR 30 | M_29,CDO1,CTH,GOT1,GOT2,KYAT1,KYAT3,MPST,TST 31 | M_30,AHCY,AHCYL1,AHCYL2,CBS,CTH,DNMT1,DNMT3A,DNMT3B,DNMT3L,MAT1A,MAT2A,MAT2B 32 | M_31,ADI1,AMD1,APIP,ENOPH1,IL4I1,MAT1A,MAT2A,MAT2B,MRI1,MTAP,SMS,SRM,TAT 33 | M_32,BCKDHA,BCKDHB,DBT,DLAT,DLD,SDS,SDSL 34 | M_33,ALDOA,ALDOB,ALDOC,FBP1,FBP2,G6PD,GPI,H6PD,PFKL,PFKM,PFKP,PGD,PGLS,PGM1,PGM2,PRPS1,PRPS1L1,PRPS2,RBKS,RPE,RPEL1,RPIA,TALDO1,TKT,TKTL1,TKTL2 35 | M_34,ACACA,ACACB,ACSBG1,ACSBG2,ACSL1,ACSL3,ACSL4,ACSL5,ACSL6,FASN,HSD11B2,HSD17B1,HSD17B12,HSD17B2,HSD17B6,HSD17B7,HSD17B8,MAST1,MCAT,MECR,OLAH,OXSM,PECR,RDH10,RDH16,RDH8,RNF2,SLC27A2 36 | M_35,ACAA1,ACAA2,ACADL,ACADM,ACADS,ACADSB,ACADVL,ACAT1,ACAT2,ACOX1,ACOX3,ACSBG1,ACSBG2,ACSL1,ACSL3,ACSL4,ACSL5,ACSL6,CPT1A,CPT1B,CPT1C,CPT2,ECHS1,EHHADH,GCDH,HADH,HADHA,HADHB,HSD17B10,HSD17B4,SLC27A2 37 | M_36,CAD,DHODH 38 | M_37,ACY3,ASPA,FOLH1,NAALAD2,NAALADL1,NAT8L,RIMKLA 39 | M_38,ALPP,ASNS,ASPG,ASRGL1 40 | M_39,ADSL,ADSS,ADSSL1,ASL,ASS1 41 | M_40,GOT1,GOT2,IL4I1 42 | M_41,AZIN2,GAD1,GAD2,GADL1 43 | M_42,ALDH1A3,ALDH1B1,ALDH2,ALDH3A1,ALDH3A2,ALDH3B1,ALDH3B2,ALDH7A1,ALDH9A1,AOC2,AOC3,SMOX 44 | M_43,CARNS1,CNDP1,CNDP2 45 | M_44,ABAT,ALDH6A1 46 | M_45,DPYD,DPYS,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,PNP,TK1,TK2,TYMP,UCK1,UCK2,UCKL1,UPB1,UPP1,UPP2,UPRT 47 | M_46,ECHDC1,MCEE,MUT,PCCA,PCCB,SUCLA2,SUCLG1,SUCLG2 48 | M_47,ACACA,ACACB,ACADS,ACOX1,ACOX3,ECHS1,EHHADH,HADHA,MLYCD 49 | M_48,GLS,GLS2,GLUL 50 | M_49,GAD1,GAD2 51 | M_50,ABAT,ALDH5A1 52 | M_51,GLUD1,GLUD2 53 | M_52,AMDHD1,FTCD,HAL,UROC1 54 | M_53,AACS,ACADM,ACAT1,ACAT2,AUH,BCAT1,BCAT2,BCKDHA,BCKDHB,DBT,DLD,ECHS1,EHHADH,HADHA,HMGCL,HMGCS1,HMGCS2,IVD,MCCC1,MCCC2,OXCT1,OXCT2 55 | M_54,ABAT,ACAD8,ACADM,ACADS,ACADSB,ACSF3,AGXT2,ALDH1B1,ALDH2,ALDH3A2,ALDH7A1,ALDH9A1,AOX1,BCAT1,BCAT2,BCKDHA,BCKDHB,DBT,DLD,ECHS1,EHHADH,HADH,HADHA,HIBADH,HIBCH,HSD17B10,MUT 56 | M_55,ACAA1,ACAA2,ACADM,ACADS,ACADSB,BCAT1,BCAT2,BCKDHA,BCKDHB,DBT,DLD,ECHS1,EHHADH,HADH,HADHA,HADHB,HSD17B10,IL4I1,MCEE,MUT,PCCA,PCCB 57 | M_56,ACAA1,ACAA2,ACADM,ACADS,ACADSB,BCAT1,BCAT2,BCKDHA,BCKDHB,DBT,DLD,ECHS1,EHHADH,HADH,HADHA,HADHB,HSD17B10,IL4I1 58 | M_57,FAH,GOT1,GOT2,GSTZ1,HGD,HPD,IL4I1,MIF,TAT 59 | M_58,ALDH1A3,ALDH3A1,ALDH3B1,ALDH3B2,AOC2,AOC3,DDC,MAOA,MAOB,TH,TPO,TYR 60 | M_59,PAH 61 | M_60,AADAT,AASS,ACAT1,ACAT2,ALDH7A1,DLD,ECHS1,EHHADH,GCDH,HADH,HADHA,HSD17B10,HSD17B4,HYKK,PHYKPL 62 | M_61,ALDH1B1,ALDH2,ALDH3A2,ALDH7A1,ALDH9A1,AOC1 63 | M_62,ODC1 64 | M_63,ARG1,ARG2 65 | M_64,AGMAT,AZIN2 66 | M_65,ASL 67 | M_66,ASS1 68 | M_67,OAT,PRODH,PRODH2,PYCR1,PYCR2,PYCR3 69 | M_68,ALDH4A1,GOT1,GOT2,HOGA1,PRODH2,PYCR1,PYCR2,PYCR3 70 | M_69,SMOX,SMS,SRM 71 | M_70,AMD1,MAT1A,MAT2A,MAT2B,SMOX,SMS,SRM 72 | M_71,SLC2A1,SLC2A2,SLC2A3,SLC2A4 73 | M_72,SLC33A1 74 | M_73,SLC13A5,SLC25A1 75 | M_74,SLC25A11 76 | M_75,SLC13A3,SLC25A10 77 | M_76,SLC25A10,SLC25A11 78 | M_77,SLC25A21 79 | M_78,SLC16A1,SLC16A3,SLC16A4 80 | M_79,SLC1A4,SLC1A5,SLC38A2,SLC38A4,SLC38A5,SLC7A10 81 | M_80,SLC1A4,SLC1A5,SLC38A1,SLC38A2,SLC38A4,SLC7A10,SLC7A11,SLC7A7 82 | M_81,SLC6A5,SLC6A9 83 | M_83,SLC5A7 84 | M_84,SLC1A4,SLC7A8 85 | M_85,SLC1A3,SLC1A6 86 | M_87,SLC29A1,SLC29A2 87 | M_88,SLC15A4 88 | M_89,SLC6A6 89 | M_90,SLC27A1 90 | M_91,SLC17A6,SLC17A7,SLC17A8,SLC1A1,SLC1A2,SLC1A3,SLC1A5,SLC1A6,SLC1A7 91 | M_92,SLC1A5 92 | M_93,SLC32A1,SLC6A1,SLC6A11,SLC6A12,SLC6A13 93 | M_94,SLC7A5,SLC7A8 94 | M_95,SLC7A8 95 | M_96,SLC6A15 96 | M_97,SLC6A15 97 | M_98,SLC6A15,SLC7A5,SLC7A6 98 | M_99,SLC25A29,SLC38A4,SLC66A1 99 | M_100,SLC25A29,SLC7A1,SLC7A2 100 | M_101,SLC25A15 101 | M_102,SLC25A15,SLC25A15P1,SLC25A2,SLC25A29 102 | M_103,SLC36A1,SLC6A20,SLC6A7 103 | M_105,SLC27A1,SLC27A2,SLC27A3,SLC27A4,SLC27A5,SLC27A6 104 | M_106,GCK,HK1,HK2,HK3,HKDC1 105 | M_107,AMDHD2,GFPT1,GFPT2,GNPDA1,GNPDA2,GNPNAT1,GPI,PGM3,UAP1,UAP1L1 106 | M_108,PGM1,PGM2 107 | M_109,UGDH,UGP2 108 | M_110,HAS1,HAS2,HAS3 109 | M_111,GYS1,GYS2,PYGB 110 | M_112,CMAS,GNE,NANP,NANS,TSPAN31 111 | M_113,ACAT1,ACAT2,FDPS,GGPS1,HMGCR,HMGCS1,HMGCS2,IDI1,IDI2,MVD,MVK,PMVK 112 | M_114,FDPS,GGPS1 113 | M_115,FNTA,FNTB,ICMT,PCYOX1,RCE1,ZMPSTE24 114 | M_116,CLK1,COQ2,COQ3,COQ5,COQ6,COQ7,PDSS1,PDSS2,PHB,PPT1 115 | M_117,ALG11,DHDDS,DOLK,SRD5A1,SRD5A2,SRD5A3 116 | M_118,DPM1 117 | M_119,ALG10,ALG10B,ALG5,ALG6,ALG8,GANAB,MAN1A1,MAN1A2,MAN1B1,MAN1C1,MAN2A1,MAN2A2,MGAT1,MGAT2,MOGS,STT3A,STT3B 118 | M_120,STT3A,STT3B 119 | M_121,GANAB,MAN1A1,MAN1A2,MAN1B1,MAN1C1,MAN2A1,MAN2A2,MGAT1,MGAT2,MOGS 120 | M_122,ABO,B4GALT1,B4GALT2,B4GALT3,FUT8,ST6GAL1,ST6GAL2 121 | M_123,MGAT4A,MGAT4B,MGAT4C 122 | M_124,MGAT3 123 | M_125,ABO,B3GLCT,B4GALT1,B4GALT2,B4GALT3,FUT4,FUT7,MGAT5B,POGLUT1,POMGNT1,POMT1,POMT2 124 | M_126,ST3GAL2,ST3GAL3,ST3GAL6 125 | M_127,B3GAT2,CHST10 126 | M_128,FUT9 127 | M_129,B3GALT6,B3GAT3,B4GALT7,XYLT1,XYLT2 128 | M_130,CHPF,CHPF2,CHSY1,CHSY3,CSGALNACT1,CSGALNACT2,DSE 129 | M_131,DSE 130 | M_132,EXT1,EXT2,EXTL1,EXTL2,EXTL3 131 | M_133,ADSL,ATIC,CANT1,ENTPD1,ENTPD3,ENTPD4,ENTPD5,ENTPD6,ENTPD8,GART,NME1,NME1-NME2,NME2,NME3,NME4,NME5,NME6,NME7,NUDT16,NUDT5,PAICS,PFAS,PPAT 132 | M_134,ADSL,GART,PAICS,PFAS 133 | M_135,ATIC,CANT1,ENTPD1,ENTPD3,ENTPD4,ENTPD5,ENTPD6,ENTPD8,NME1,NME1-NME2,NME2,NME3,NME4,NME5,NME6,NME7,NUDT16,NUDT5 134 | M_136,ADSL,ADSS,ADSSL1,AMPD1,AMPD2,AMPD3 135 | M_137,IMPDH1,IMPDH2 136 | M_138,AK1,AK2,AK3,AK4,AK5,AK6,AK7,AK8,ENTPD1,ENTPD3,ENTPD8,F9,NME1,NME1-NME2,NME2,NME3,NME4,NME5,NME6,NME7,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,PKLR,PKM,RRM1,RRM2,RRM2B 137 | M_139,ADK,DCK,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,PNP 138 | M_140,AK1,AK2,AK4,AK5,AK7,AK8,NME1,NME1-NME2,NME2,NME3,NME4,NME5,NME6,NME7,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,PKLR,PKM,RRM1,RRM2,RRM2B 139 | M_141,PNP 140 | M_142,ADA,PNP 141 | M_143,ADA,HPRT1,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,PNP 142 | M_144,XDH 143 | M_145,HPRT1,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,NUDT2,NUDT5,PNP 144 | M_146,XDH 145 | M_147,GDA 146 | M_148,APRT,GMPS,HPRT1,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,NUDT2,NUDT5,PNP 147 | M_149,APRT,HPRT1,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,PNP 148 | M_150,UMPS 149 | M_151,UMPS 150 | M_152,DPYD,DPYS,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,UCK1,UCK2,UCKL1,UPB1,UPP1,UPP2,UPRT 151 | M_153,CANT1,CMPK1,CMPK2,CTPS1,CTPS2,ENTPD1,ENTPD3,ENTPD4,ENTPD5,ENTPD6,ENTPD8,NME1,NME1-NME2,NME2,NME3,NME4,NME5,NME6,NME7 152 | M_154,DPYD,DPYS,UPB1 153 | M_155,CTPS1,CTPS2,ENTPD1,ENTPD3,ENTPD8,NME1,NME1-NME2,NME2,NME3,NME4,NME5,NME6,NME7 154 | M_156,CMPK1,CMPK2,ENTPD1,ENTPD3,ENTPD8,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,UCK1,UCK2,UCKL1 155 | M_157,RRM1,RRM2,RRM2B 156 | M_158,CMPK1,CMPK2,DCK,DCTPP1,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M 157 | M_159,DCK,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M 158 | M_160,CMPK1,CMPK2,DCTD,DCTPP1 159 | M_161,NME1,NME1-NME2,NME2,NME3,NME4,NME5,NME6,NME7 160 | M_162,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,TK1,TK2 161 | M_163,TYMS 162 | M_164,ACSF3,AGXT2,ALDH1B1,ALDH2,ALDH3A2,ALDH7A1,ALDH9A1,AOX1,DPYD,DPYS,MUT,NT5C,NT5C1A,NT5C1B,NT5C1B-RDH14,NT5C2,NT5C3A,NT5C3B,NT5E,NT5M,TK1,TK2,TYMP,UPB1 163 | M_165,DTYMK,ENTPD1,ENTPD3,ENTPD8,NME1,NME1-NME2,NME2,NME3,NME4,NME5,NME6,NME7 164 | M_166,ACSF3,AGXT2,ALDH1B1,ALDH2,ALDH3A2,ALDH7A1,ALDH9A1,AOX1,DPYD,DPYS,MUT,UPB1 165 | M_167,CYP51A1,DHCR24,DHCR7,EBP,FDFT1,HSD17B1,HSD17B12,HSD17B2,HSD17B6,HSD17B7,HSD17B8,LSS,MSMO1,NSDHL,RNF2,SC5D,SQLE,TM7SF2 166 | M_168,ACOT1,ACOT2,ACOT4,ACOT7,ACOT8,ACOX2,AKR1C4,AKR1D1,AMACR,BAAT,CH25H,CYP27A1,CYP39A1,CYP46A1,CYP7A1,CYP7B1,CYP8B1,HSD11B2,HSD17B4,HSD3B7,RDH10,RDH16,RDH8,SCP2,SLC27A5 167 | M_169,AKR1C1,AKR1C2,AKR1C3,AKR1C4,AKR1D1,ALG11,COMT,CYP11A1,CYP11B1,CYP11B2,CYP17A1,CYP19A1,CYP1A1,CYP1A2,CYP1B1,CYP2A13,CYP2A6,CYP2A7,CYP2B6,CYP2C18,CYP2C19,CYP2C8,CYP2C9,CYP2D6,CYP2E1,CYP2F1,CYP2J2,CYP2S1,CYP3A4,CYP3A43,CYP3A5,CYP3A7,CYP4B1,CYP4F8,CYP4X1,CYP4Z1,HSD11B1,HSD11B2,HSD17B1,HSD17B12,HSD17B2,HSD17B3,HSD17B6,HSD17B7,HSD17B8,HSD3B1,HSD3B2,RDH10,RDH16,RDH8,RNF2,SRD5A1,SRD5A2,SRD5A3,STS,SULT1E1,SULT2B1,UGT1A1,UGT1A10,UGT1A3,UGT1A4,UGT1A5,UGT1A6,UGT1A7,UGT1A8,UGT1A9,UGT2A1,UGT2A2,UGT2A3,UGT2B10,UGT2B11,UGT2B15,UGT2B17,UGT2B28,UGT2B4,UGT2B7 168 | M_170,GMPS 169 | M_171,CMPK1,CMPK2,DCTPP1 170 | -------------------------------------------------------------------------------- /data/module_info_GLM1.csv: -------------------------------------------------------------------------------- 1 | "","Module_id","Compound_IN_name","Compound_IN_ID","Compound_OUT_name","Compound_OUT_ID","Supermodule_id" 2 | "M_1","1","Glucose","C00267","G6P","C00668","1" 3 | "M_2","2","G6P","C00668","G3P","C00118","1" 4 | "M_3","3","G3P","C00118","3PD","C00197","1" 5 | "M_4","4","3PD","C00197","Pyruvate","C00022","1" 6 | "M_5","5","Pyruvate","C00022","Acetyl-Coa","C00024","2" 7 | "M_6","6","Pyruvate","C00022","Lactate","C00186","3" 8 | "M_7","7","Acetyl-CoA+Oxaloacetate","C00024+C00036","Citrate","C00158","2" 9 | "M_8","8","Citrate","C00158","2OG","C00026","2" 10 | "M_9","9","2OG","C00026","Succinyl-CoA","C00091","4" 11 | "M_10","10","Succinyl-CoA","C00091","Succinate","C00042","4" 12 | "M_11","11","Succinate","C00042","Fumarate","C00122","4" 13 | "M_12","12","Fumarate","C00122","Malate","C00149","4" 14 | "M_13","13","Malate","C00149","Oxaloacetate","C00036","4" 15 | "M_14","14","3PD","C00197","Serine","C00065","1" 16 | "M_15","15","G3P","C00118","PRPP","C00119","1" 17 | "M_16","16","Glutamine","C00064","Glutamate","C00025","5" 18 | "M_17","17","Glutamate","C00025","GABA","C00334","5" 19 | "M_18","18","GABA","C00334","Succinate","C00042","5" 20 | "M_19","19","Glutamate","C00025","2OG","C00026","5" 21 | "M_20","20","Glucose_in","C00000","Glucose","C00267","1" 22 | "M_21","21","Lactate","C00186","Lactate_OUT","C00000","3" 23 | "M_22","22","glutamate_in","C00000","glutamate","C00025","5" 24 | "M_23","23","Glutamine_in","C00000","Glutamine","C00064","5" 25 | -------------------------------------------------------------------------------- /data/module_info_GLM2.csv: -------------------------------------------------------------------------------- 1 | "","Module_id","Compound_IN_name","Compound_IN_ID","Compound_OUT_name","Compound_OUT_ID","Supermodule_id" 2 | "M_1","1","Glucose","C00267","G6P","C00668","1" 3 | "M_2","2","G6P","C00668","G3P","C00118","1" 4 | "M_3","3","G3P","C00118","3PD","C00197","1" 5 | "M_4","4","3PD","C00197","Pyruvate","C00022","1" 6 | "M_5","5","Pyruvate","C00022","Acetyl-Coa","C00024","2" 7 | "M_6","6","Pyruvate","C00022","Lactate","C00186","3" 8 | "M_7","7","Acetyl-CoA+Oxaloacetate","C00024+C00036","Citrate","C00158","2" 9 | "M_8","8","Citrate","C00158","2OG","C00026","2" 10 | "M_9","9","2OG","C00026","Succinyl-CoA","C00091","4" 11 | "M_10","10","Succinyl-CoA","C00091","Succinate","C00042","4" 12 | "M_11","11","Succinate","C00042","Fumarate","C00122","4" 13 | "M_12","12","Fumarate","C00122","Malate","C00149","4" 14 | "M_13","13","Malate","C00149","Oxaloacetate","C00036","4" 15 | "M_14","14","3PD","C00197","Serine","C00065","1" 16 | "M_15","15","G3P","C00118","PRPP","C00119","1" 17 | "M_16","16","Glutamine","C00064","Glutamate","C00025","5" 18 | "M_17","17","Glutamate","C00025","2OG","C00026","5" 19 | "M_18","18","Glucose_in","C00000","Glucose","C00267","1" 20 | "M_19","19","Lactate","C00186","Lactate_OUT","C00000","3" 21 | "M_20","20","Glutamine_in","C00000","Glutamine","C00064","5" 22 | -------------------------------------------------------------------------------- /doc/Figure 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/doc/Figure 1.png -------------------------------------------------------------------------------- /input/mouse_example_cell_ident.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/input/mouse_example_cell_ident.RData -------------------------------------------------------------------------------- /input/mouse_module_info.RData: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/input/mouse_module_info.RData -------------------------------------------------------------------------------- /manuscript/01-scFEA.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/manuscript/01-scFEA.pdf -------------------------------------------------------------------------------- /manuscript/02-scFEA supplementary methods.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/manuscript/02-scFEA supplementary methods.pdf -------------------------------------------------------------------------------- /output/out: -------------------------------------------------------------------------------- 1 | The output directory existed to avoid error. -------------------------------------------------------------------------------- /requirements: -------------------------------------------------------------------------------- 1 | pandas >= 0.23.4 2 | numpy >= 1.15.4 3 | tqdm >= 4.28.1 4 | umap-learn >= 0.5.1 5 | -------------------------------------------------------------------------------- /result/Figure 1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/result/Figure 1.pdf -------------------------------------------------------------------------------- /result/Figure 2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/result/Figure 2.pdf -------------------------------------------------------------------------------- /result/Figure 3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/result/Figure 3.pdf -------------------------------------------------------------------------------- /result/Figure 4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/result/Figure 4.pdf -------------------------------------------------------------------------------- /result/Figure 5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/result/Figure 5.pdf -------------------------------------------------------------------------------- /result/Figure 6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/result/Figure 6.pdf -------------------------------------------------------------------------------- /result/Table 1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/result/Table 1.xlsx -------------------------------------------------------------------------------- /src/ClassFlux.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | 4 | @author: wnchang 5 | """ 6 | 7 | # import sys 8 | import torch 9 | import torch.nn as nn 10 | 11 | 12 | class FLUX(nn.Module): 13 | def __init__(self, matrix, n_modules, f_in = 50, f_out = 1): 14 | super(FLUX, self).__init__() 15 | # gene to flux 16 | self.inSize = f_in 17 | 18 | self.m_encoder = nn.ModuleList([ 19 | nn.Sequential(nn.Linear(self.inSize,8, bias = False), 20 | nn.Tanhshrink(), 21 | nn.Linear(8, f_out), 22 | nn.Tanhshrink() 23 | ) 24 | for i in range(n_modules)]) 25 | 26 | 27 | def updateC(self, m, n_comps, cmMat): # stoichiometric matrix 28 | 29 | c = torch.zeros((m.shape[0], n_comps)) 30 | for i in range(c.shape[1]): 31 | tmp = m * cmMat[i,:] 32 | c[:,i] = torch.sum(tmp, dim=1) 33 | 34 | return c 35 | 36 | 37 | def forward(self, x, n_modules, n_genes, n_comps, cmMat): 38 | 39 | for i in range(n_modules): 40 | x_block = x[:,i*n_genes: (i+1)*n_genes,] 41 | subnet = self.m_encoder[i] 42 | if i == 0: 43 | m = subnet(x_block) 44 | else: 45 | m = torch.cat((m, subnet(x_block)),1) 46 | 47 | c = self.updateC(m, n_comps, cmMat) 48 | 49 | return m, c 50 | -------------------------------------------------------------------------------- /src/DatasetFlux.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | @author: wnchang 4 | """ 5 | 6 | from torch.utils.data import Dataset 7 | 8 | 9 | class MyDataset(Dataset): 10 | def __init__(self, data, label, info, transform=None): 11 | self.data = data 12 | self.label = label 13 | self.info = info 14 | self.transform = transform 15 | 16 | 17 | def __getitem__(self, index): 18 | x = self.data[index] 19 | y = self.label[index] 20 | z = self.info[index] 21 | if self.transform: 22 | x = self.transform(x) 23 | return x, y, z 24 | 25 | 26 | 27 | def __len__(self): 28 | return len(self.data) 29 | 30 | -------------------------------------------------------------------------------- /src/scFEA.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | 4 | @author: wnchang@iu.edu 5 | """ 6 | 7 | # system lib 8 | import argparse 9 | import time 10 | import warnings 11 | 12 | # tools 13 | import torch 14 | from torch.autograd import Variable 15 | import matplotlib.pyplot as plt 16 | import numpy as np 17 | import pandas as pd 18 | import magic 19 | from tqdm import tqdm 20 | 21 | # scFEA lib 22 | from ClassFlux import FLUX # Flux class network 23 | from util import pearsonr 24 | from DatasetFlux import MyDataset 25 | 26 | 27 | # hyper parameters 28 | LEARN_RATE = 0.008 29 | #EPOCH = 100 30 | LAMB_BA = 1 31 | LAMB_NG = 1 32 | LAMB_CELL = 1 33 | LAMB_MOD = 1e-2 34 | 35 | 36 | def myLoss(m, c, lamb1 = 0.2, lamb2= 0.2, lamb3 = 0.2, lamb4 = 0.2, geneScale = None, moduleScale = None): 37 | 38 | # balance constrain 39 | total1 = torch.pow(c, 2) 40 | total1 = torch.sum(total1, dim = 1) 41 | 42 | # non-negative constrain 43 | error = torch.abs(m) - m 44 | total2 = torch.sum(error, dim=1) 45 | 46 | 47 | # sample-wise variation constrain 48 | diff = torch.pow(torch.sum(m, dim=1) - geneScale, 2) 49 | #total3 = torch.pow(diff, 0.5) 50 | if sum(diff > 0) == m.shape[0]: # solve Nan after several iteraions 51 | total3 = torch.pow(diff, 0.5) 52 | else: 53 | total3 = diff 54 | 55 | # module-wise variation constrain 56 | if lamb4 > 0 : 57 | corr = torch.FloatTensor(np.ones(m.shape[0])) 58 | for i in range(m.shape[0]): 59 | corr[i] = pearsonr(m[i, :], moduleScale[i, :]) 60 | corr = torch.abs(corr) 61 | penal_m_var = torch.FloatTensor(np.ones(m.shape[0])) - corr 62 | total4 = penal_m_var 63 | else: 64 | total4 = torch.FloatTensor(np.zeros(m.shape[0])) 65 | 66 | # loss 67 | loss1 = torch.sum(lamb1 * total1) 68 | loss2 = torch.sum(lamb2 * total2) 69 | loss3 = torch.sum(lamb3 * total3) 70 | loss4 = torch.sum(lamb4 * total4) 71 | loss = loss1 + loss2 + loss3 + loss4 72 | return loss, loss1, loss2, loss3, loss4 73 | 74 | 75 | def main(args): 76 | 77 | # set arguments 78 | data_path = args.data_dir 79 | input_path = args.input_dir 80 | res_dir = args.res_dir 81 | test_file = args.test_file 82 | moduleGene_file = args.moduleGene_file 83 | cm_file = args.stoichiometry_matrix 84 | sc_imputation = args.sc_imputation 85 | cName_file = args.cName_file 86 | fileName = args.output_flux_file 87 | balanceName = args.output_balance_file 88 | EPOCH = args.train_epoch 89 | 90 | if EPOCH <= 0: 91 | raise NameError('EPOCH must greater than 1!') 92 | 93 | # choose cpu or gpu automatically 94 | device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 95 | 96 | # read data 97 | print("Starting load data...") 98 | geneExpr = pd.read_csv( 99 | input_path + '/' + test_file, 100 | index_col=0) 101 | geneExpr = geneExpr.T 102 | geneExpr = geneExpr * 1.0 103 | if sc_imputation == True: 104 | magic_operator = magic.MAGIC() 105 | with warnings.catch_warnings(): 106 | warnings.simplefilter("ignore") 107 | geneExpr = magic_operator.fit_transform(geneExpr) 108 | if geneExpr.max().max() > 50: 109 | geneExpr = (geneExpr + 1).apply(np.log2) 110 | geneExprSum = geneExpr.sum(axis=1) 111 | stand = geneExprSum.mean() 112 | geneExprScale = geneExprSum / stand 113 | geneExprScale = torch.FloatTensor(geneExprScale.values).to(device) 114 | 115 | BATCH_SIZE = geneExpr.shape[0] 116 | 117 | moduleGene = pd.read_csv( 118 | data_path + '/' + moduleGene_file, 119 | sep=',', 120 | index_col=0) 121 | moduleLen = [moduleGene.iloc[i,:].notna().sum() for i in range(moduleGene.shape[0]) ] 122 | moduleLen = np.array(moduleLen) 123 | 124 | # find existing gene 125 | module_gene_all = [] 126 | for i in range(moduleGene.shape[0]): 127 | for j in range(moduleGene.shape[1]): 128 | if pd.isna(moduleGene.iloc[i,j]) == False: 129 | module_gene_all.append(moduleGene.iloc[i,j]) 130 | module_gene_all = set(module_gene_all) 131 | data_gene_all = set(geneExpr.columns) 132 | gene_overlap = list(data_gene_all.intersection(module_gene_all)) # fix 133 | gene_overlap.sort() 134 | 135 | cmMat = pd.read_csv( 136 | data_path + '/' + cm_file, 137 | sep=',', 138 | header=None) 139 | cmMat = cmMat.values 140 | cmMat = torch.FloatTensor(cmMat).to(device) 141 | 142 | if cName_file != 'noCompoundName': 143 | print("Load compound name file, the balance output will have compound name.") 144 | cName = pd.read_csv( 145 | data_path + '/' + cName_file, 146 | sep=',', 147 | header=0) 148 | cName = cName.columns 149 | print("Load data done.") 150 | 151 | print("Starting process data...") 152 | emptyNode = [] 153 | # extract overlap gene 154 | geneExpr = geneExpr[gene_overlap] 155 | gene_names = geneExpr.columns 156 | cell_names = geneExpr.index.astype(str) 157 | n_modules = moduleGene.shape[0] 158 | n_genes = len(gene_names) 159 | n_cells = len(cell_names) 160 | n_comps = cmMat.shape[0] 161 | geneExprDf = pd.DataFrame(columns = ['Module_Gene'] + list(cell_names)) 162 | for i in range(n_modules): 163 | genes = moduleGene.iloc[i,:].values.astype(str) 164 | genes = [g for g in genes if g != 'nan'] 165 | if not genes: 166 | emptyNode.append(i) 167 | continue 168 | temp = geneExpr.copy() 169 | temp.loc[:, [g for g in gene_names if g not in genes]] = 0 170 | temp = temp.T 171 | temp['Module_Gene'] = ['%02d_%s' % (i,g) for g in gene_names] 172 | geneExprDf = geneExprDf.append(temp, ignore_index = True, sort=False) 173 | geneExprDf.index = geneExprDf['Module_Gene'] 174 | geneExprDf.drop('Module_Gene', axis = 'columns', inplace = True) 175 | X = geneExprDf.values.T 176 | X = torch.FloatTensor(X).to(device) 177 | 178 | #prepare data for constraint of module variation based on gene 179 | df = geneExprDf 180 | df.index = [i.split('_')[0] for i in df.index] 181 | df.index = df.index.astype(int) # mush change type to ensure correct order, T column name order change! 182 | #module_scale = df.groupby(df.index).sum(axis=1).T # pandas version update 183 | module_scale = df.groupby(df.index).sum().T 184 | module_scale = torch.FloatTensor(module_scale.values/ moduleLen) 185 | print("Process data done.") 186 | 187 | 188 | 189 | # ============================================================================= 190 | #NN 191 | torch.manual_seed(16) 192 | net = FLUX(X, n_modules, f_in = n_genes, f_out = 1).to(device) 193 | optimizer = torch.optim.Adam(net.parameters(), lr = LEARN_RATE) 194 | 195 | #Dataloader 196 | dataloader_params = {'batch_size': BATCH_SIZE, 197 | 'shuffle': False, 198 | 'num_workers': 0, 199 | 'pin_memory': False} 200 | 201 | dataSet = MyDataset(X, geneExprScale, module_scale) 202 | train_loader = torch.utils.data.DataLoader(dataset=dataSet, 203 | **dataloader_params) 204 | 205 | # ============================================================================= 206 | 207 | 208 | 209 | 210 | # ============================================================================= 211 | print("Starting train neural network...") 212 | start = time.time() 213 | # training 214 | loss_v = [] 215 | loss_v1 = [] 216 | loss_v2 = [] 217 | loss_v3 = [] 218 | loss_v4 = [] 219 | net.train() 220 | timestr = time.strftime("%Y%m%d-%H%M%S") 221 | lossName = "./output/lossValue_" + timestr + ".txt" 222 | file_loss = open(lossName, "a") 223 | for epoch in tqdm(range(EPOCH)): 224 | loss, loss1, loss2, loss3, loss4 = 0,0,0,0,0 225 | 226 | for i, (X, X_scale, m_scale) in enumerate(train_loader): 227 | 228 | X_batch = Variable(X.float().to(device)) 229 | X_scale_batch = Variable(X_scale.float().to(device)) 230 | m_scale_batch = Variable(m_scale.float().to(device)) 231 | 232 | out_m_batch, out_c_batch = net(X_batch, n_modules, n_genes, n_comps, cmMat) 233 | loss_batch, loss1_batch, loss2_batch, loss3_batch, loss4_batch = myLoss(out_m_batch, out_c_batch, 234 | lamb1 = LAMB_BA, lamb2 = LAMB_NG, lamb3 = LAMB_CELL, lamb4 = LAMB_MOD, 235 | geneScale = X_scale_batch, moduleScale = m_scale_batch) 236 | 237 | optimizer.zero_grad() 238 | loss_batch.backward() 239 | optimizer.step() 240 | 241 | loss += loss_batch.cpu().data.numpy() 242 | loss1 += loss1_batch.cpu().data.numpy() 243 | loss2 += loss2_batch.cpu().data.numpy() 244 | loss3 += loss3_batch.cpu().data.numpy() 245 | loss4 += loss4_batch.cpu().data.numpy() 246 | 247 | #print('epoch: %02d, loss1: %.8f, loss2: %.8f, loss3: %.8f, loss4: %.8f, loss: %.8f' % (epoch+1, loss1, loss2, loss3, loss4, loss)) 248 | file_loss.write('epoch: %02d, loss1: %.8f, loss2: %.8f, loss3: %.8f, loss4: %.8f, loss: %.8f. \n' % (epoch+1, loss1, loss2, loss3, loss4, loss)) 249 | 250 | loss_v.append(loss) 251 | loss_v1.append(loss1) 252 | loss_v2.append(loss2) 253 | loss_v3.append(loss3) 254 | loss_v4.append(loss4) 255 | 256 | # ============================================================================= 257 | end = time.time() 258 | print("Training time: ", end - start) 259 | 260 | file_loss.close() 261 | plt.plot(loss_v, '--') 262 | plt.plot(loss_v1) 263 | plt.plot(loss_v2) 264 | plt.plot(loss_v3) 265 | plt.plot(loss_v4) 266 | plt.legend(['total', 'balance', 'negative', 'cellVar', 'moduleVar']); 267 | imgName = './' + res_dir + '/loss_' + timestr + ".png" 268 | plt.savefig(imgName) 269 | timeName = './' + res_dir + '/time_' + timestr + ".txt" 270 | f = open(timeName, "a") 271 | runTimeStr = str(end - start) 272 | f.write(runTimeStr) 273 | f.close() 274 | 275 | 276 | # Dataloader 277 | dataloader_params = {'batch_size': 1, 278 | 'shuffle': False, 279 | 'num_workers': 0, 280 | 'pin_memory': False} 281 | 282 | dataSet = MyDataset(X, geneExprScale, module_scale) 283 | test_loader = torch.utils.data.DataLoader(dataset=dataSet, 284 | **dataloader_params) 285 | 286 | #testing 287 | fluxStatuTest = np.zeros((n_cells, n_modules), dtype='f') #float32 288 | balanceStatus = np.zeros((n_cells, n_comps), dtype='f') 289 | net.eval() 290 | for epoch in range(1): 291 | loss, loss1, loss2 = 0,0,0 292 | 293 | for i, (X, X_scale, _) in enumerate(test_loader): 294 | 295 | X_batch = Variable(X.float().to(device)) 296 | out_m_batch, out_c_batch = net(X_batch, n_modules, n_genes, n_comps, cmMat) 297 | 298 | # save data 299 | fluxStatuTest[i, :] = out_m_batch.detach().numpy() 300 | balanceStatus[i, :] = out_c_batch.detach().numpy() 301 | 302 | 303 | 304 | # save to file 305 | if fileName == 'NULL': 306 | # user do not define file name of flux 307 | fileName = "./" + res_dir + "/" + test_file[-len(test_file):-4] + "_module" + str(n_modules) + "_cell" + str(n_cells) + "_batch" + str(BATCH_SIZE) + \ 308 | "_LR" + str(LEARN_RATE) + "_epoch" + str(EPOCH) + "_SCimpute_" + str(sc_imputation)[0] + \ 309 | "_lambBal" + str(LAMB_BA) + "_lambSca" + str(LAMB_NG) + "_lambCellCor" + str(LAMB_CELL) + "_lambModCor_1e-2" + \ 310 | '_' + timestr + ".csv" 311 | setF = pd.DataFrame(fluxStatuTest) 312 | setF.columns = moduleGene.index 313 | setF.index = geneExpr.index.tolist() 314 | setF.to_csv(fileName) 315 | 316 | setB = pd.DataFrame(balanceStatus) 317 | setB.rename(columns = lambda x: x + 1) 318 | setB.index = setF.index 319 | if cName_file != 'noCompoundName': 320 | setB.columns = cName 321 | if balanceName == 'NULL': 322 | # user do not define file name of balance 323 | balanceName = "./output/balance_" + timestr + ".csv" 324 | setB.to_csv(balanceName) 325 | 326 | 327 | print("scFEA job finished. Check result in the desired output folder.") 328 | 329 | 330 | return 331 | 332 | 333 | def parse_arguments(parser): 334 | 335 | 336 | parser.add_argument('--data_dir', type=str, default='data', metavar='', 337 | help='The data directory for scFEA model files.') 338 | parser.add_argument('--input_dir', type=str, default='input', metavar='', 339 | help='The data directory for single cell input data.') 340 | parser.add_argument('--res_dir', type=str, default='output', metavar='', 341 | help='The data directory for result [output]. The output of scFEA includes two matrices, predicted metabolic flux and metabolites stress at single cell resolution.') 342 | parser.add_argument('--test_file', type=str, default='Melissa_full.csv', 343 | help='The test SC file [input]. The input of scFEA is a single cell profile matrix, where row is gene and column is cell. Example datasets are provided in /data/ folder. The input can be raw counts or normalised counts. The logarithm would be performed if value larger than 30.') 344 | parser.add_argument('--moduleGene_file', type=str, default='module_gene_m168.csv', 345 | help='The table contains genes for each module. We provide human and mouse two models in scFEA. For human model, please use module_gene_m168.csv which is default. All candidate moduleGene files are provided in /data/ folder.') 346 | parser.add_argument('--stoichiometry_matrix', type=str, default='cmMat_c70_m168.csv', 347 | help='The table describes relationship between compounds and modules. Each row is an intermediate metabolite and each column is metabolic module. For human model, please use cmMat_171.csv which is default. All candidate stoichiometry matrices are provided in /data/ folder.') 348 | parser.add_argument('--cName_file', type=str, default='cName_c70_m168.csv', 349 | help='The name of compounds. The table contains two rows. First row is compounds name and second row is corresponding id.') 350 | parser.add_argument('--sc_imputation', type=eval, default='False', choices=[True, False], 351 | help='Whether perform imputation for SC dataset (recommend set to for 10x data).') 352 | parser.add_argument('--output_flux_file', type=str, default='NULL', 353 | help='User defined predicted flux file name.') 354 | parser.add_argument('--output_balance_file', type=str, default='NULL', 355 | help='User defined predicted balance file name.') 356 | parser.add_argument('--train_epoch', type=int, default=100, nargs='?', 357 | help='User defined EPOCH (training iteration).') 358 | 359 | 360 | 361 | args = parser.parse_args() 362 | 363 | return args 364 | 365 | 366 | if __name__ == "__main__": 367 | parser = argparse.ArgumentParser( 368 | description='scFEA: A graph neural network model to estimate cell-wise metabolic flux using single cell RNA-seq data') 369 | args = parse_arguments(parser) 370 | main(args) -------------------------------------------------------------------------------- /src/scFEA_grad.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | Created on Mon Apr 5 22:13:30 2021 4 | 5 | @author: wnchang 6 | """ 7 | 8 | # system lib 9 | #import sys 10 | import argparse 11 | import time 12 | import warnings 13 | import pickle 14 | 15 | 16 | # tools 17 | import torch 18 | from torch.autograd import Variable 19 | #import torch.nn.functional as F 20 | import matplotlib.pyplot as plt 21 | import numpy as np 22 | import pandas as pd 23 | #from torch.utils.data import DataLoader 24 | #import torch.nn as nn 25 | import magic 26 | from tqdm import tqdm 27 | 28 | # my lib 29 | from ClassFlux import FLUX # Flux class network 30 | from util import pearsonr 31 | from DatasetFlux import MyDataset 32 | 33 | 34 | 35 | # hyper parameters 36 | LEARN_RATE = 0.008 37 | # EPOCH = 100 38 | LAMB_BA = 1 39 | LAMB_NG = 1 40 | LAMB_CELL = 1 41 | LAMB_MOD = 1e-2 42 | 43 | 44 | def myLoss(m, c, lamb1 = 0.2, lamb2= 0.2, lamb3 = 0.2, lamb4 = 0.2, geneScale = None, moduleScale = None): 45 | 46 | # balance constrain 47 | total1 = torch.pow(c, 2) 48 | total1 = torch.sum(total1, dim = 1) 49 | 50 | # non-negative constrain 51 | error = torch.abs(m) - m # m is SC * N_module 52 | total2 = torch.sum(error, dim=1) 53 | 54 | 55 | # sample-wise variation constrain 56 | diff = torch.pow(torch.sum(m, dim=1) - geneScale, 2) 57 | #total3 = torch.pow(diff, 0.5) 58 | if sum(diff > 0) == m.shape[0]: # solve Nan after several iteraions 59 | total3 = torch.pow(diff, 0.5) 60 | else: 61 | print('find 0 in loss three.') 62 | total3 = diff 63 | 64 | 65 | # module-wise variation constrain 66 | if lamb4 > 0 : 67 | corr = torch.FloatTensor(np.ones(m.shape[0])) 68 | for i in range(m.shape[0]): 69 | corr[i] = pearsonr(m[i, :], moduleScale[i, :]) 70 | corr = torch.abs(corr) 71 | penal_m_var = torch.FloatTensor(np.ones(m.shape[0])) - corr 72 | total4 = penal_m_var 73 | else: 74 | total4 = torch.FloatTensor(np.zeros(m.shape[0])) 75 | 76 | # loss 77 | loss1 = torch.sum(lamb1 * total1) 78 | loss2 = torch.sum(lamb2 * total2) 79 | loss3 = torch.sum(lamb3 * total3) 80 | loss4 = torch.sum(lamb4 * total4) 81 | loss = loss1 + loss2 + loss3 + loss4 82 | return loss, loss1, loss2, loss3, loss4 83 | 84 | 85 | def main(args): 86 | 87 | # set arguments 88 | data_path = args.data_dir 89 | input_path = args.input_dir 90 | res_dir = args.res_dir 91 | test_file = args.test_file 92 | moduleGene_file = args.moduleGene_file 93 | cm_file = args.stoichiometry_matrix 94 | sc_imputation = args.sc_imputation 95 | cName_file = args.cName_file 96 | gradName = args.output_gradient_file 97 | EPOCH = args.train_epoch 98 | #fileName = args.output_flux_file 99 | #balanceName = args.output_balance_file 100 | 101 | if EPOCH <= 0: 102 | raise NameError('EPOCH must greater than 1!') 103 | 104 | # choose cpu or gpu automatically 105 | device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") 106 | 107 | # read data 108 | print("Starting load data...") 109 | geneExpr = pd.read_csv( 110 | input_path + '/' + test_file, 111 | index_col=0) 112 | geneExpr = geneExpr.T 113 | geneExpr = geneExpr * 1.0 114 | if sc_imputation == True: 115 | magic_operator = magic.MAGIC() 116 | with warnings.catch_warnings(): 117 | warnings.simplefilter("ignore") 118 | geneExpr = magic_operator.fit_transform(geneExpr) 119 | if geneExpr.max().max() > 50: 120 | geneExpr = (geneExpr + 1).apply(np.log2) 121 | geneExprSum = geneExpr.sum(axis=1) 122 | stand = geneExprSum.mean() 123 | geneExprScale = geneExprSum / stand 124 | geneExprScale = torch.FloatTensor(geneExprScale.values).to(device) 125 | 126 | BATCH_SIZE = geneExpr.shape[0] 127 | 128 | moduleGene = pd.read_csv( 129 | data_path + '/' + moduleGene_file, 130 | sep=',', 131 | index_col=0) 132 | moduleLen = [moduleGene.iloc[i,:].notna().sum() for i in range(moduleGene.shape[0]) ] 133 | moduleLen = np.array(moduleLen) 134 | 135 | # find existing gene 136 | module_gene_all = [] 137 | for i in range(moduleGene.shape[0]): 138 | for j in range(moduleGene.shape[1]): 139 | if pd.isna(moduleGene.iloc[i,j]) == False: 140 | module_gene_all.append(moduleGene.iloc[i,j]) 141 | module_gene_all = set(module_gene_all) 142 | data_gene_all = set(geneExpr.columns) 143 | gene_overlap = list(data_gene_all.intersection(module_gene_all)) # fix 144 | gene_overlap.sort() 145 | 146 | cmMat = pd.read_csv( 147 | data_path + '/' + cm_file, 148 | sep=',', 149 | header=None) 150 | cmMat = cmMat.values 151 | cmMat = torch.FloatTensor(cmMat).to(device) 152 | 153 | if cName_file != 'noCompoundName': 154 | print("Load compound name file, the balance output will have compound name.") 155 | cName = pd.read_csv( 156 | "./data/" + cName_file, 157 | sep=',', 158 | header=0) 159 | cName = cName.columns 160 | print("Load data done.") 161 | 162 | print("Starting process data...") 163 | emptyNode = [] 164 | # extract overlap gene 165 | geneExpr = geneExpr[gene_overlap] 166 | gene_names = geneExpr.columns 167 | cell_names = geneExpr.index.astype(str) 168 | n_modules = moduleGene.shape[0] 169 | n_genes = len(gene_names) 170 | n_cells = len(cell_names) 171 | n_comps = cmMat.shape[0] 172 | geneExprDf = pd.DataFrame(columns = ['Module_Gene'] + list(cell_names)) 173 | for i in range(n_modules): 174 | genes = moduleGene.iloc[i,:].values.astype(str) 175 | genes = [g for g in genes if g != 'nan'] 176 | if not genes: 177 | emptyNode.append(i) 178 | continue 179 | temp = geneExpr.copy() 180 | temp.loc[:, [g for g in gene_names if g not in genes]] = 0 181 | temp = temp.T 182 | temp['Module_Gene'] = ['%02d_%s' % (i,g) for g in gene_names] 183 | geneExprDf = geneExprDf.append(temp, ignore_index = True, sort=False) 184 | geneExprDf.index = geneExprDf['Module_Gene'] 185 | geneExprDf.drop('Module_Gene', axis = 'columns', inplace = True) 186 | X = geneExprDf.values.T 187 | X = torch.FloatTensor(X).to(device) 188 | 189 | #prepare data for constraint of module variation based on gene 190 | df = geneExprDf 191 | df.index = [i.split('_')[0] for i in df.index] 192 | df.index = df.index.astype(int) # mush change type to ensure correct order, T column name order change! 193 | #module_scale = df.groupby(df.index).sum(axis=1).T # pandas version update 194 | module_scale = df.groupby(df.index).sum().T 195 | module_scale = torch.FloatTensor(module_scale.values/ moduleLen) 196 | print("Process data done.") 197 | 198 | 199 | 200 | # ============================================================================= 201 | #NN 202 | torch.manual_seed(16) 203 | net = FLUX(X, n_modules, f_in = n_genes, f_out = 1).to(device) 204 | optimizer = torch.optim.Adam(net.parameters(), lr = LEARN_RATE) 205 | 206 | #Dataloader 207 | dataloader_params = {'batch_size': BATCH_SIZE, 208 | 'shuffle': False, 209 | 'num_workers': 0, 210 | 'pin_memory': False} 211 | 212 | dataSet = MyDataset(X, geneExprScale, module_scale) 213 | train_loader = torch.utils.data.DataLoader(dataset=dataSet, 214 | **dataloader_params) 215 | 216 | # ============================================================================= 217 | 218 | 219 | 220 | # ============================================================================= 221 | print("Starting train neural network...") 222 | start = time.time() 223 | # training 224 | loss_v = [] 225 | loss_v1 = [] 226 | loss_v2 = [] 227 | loss_v3 = [] 228 | loss_v4 = [] 229 | net.train() 230 | timestr = time.strftime("%Y%m%d-%H%M%S") 231 | lossName = "./output/lossValue_" + timestr + ".txt" 232 | file_loss = open(lossName, "a") 233 | for epoch in tqdm(range(EPOCH)): 234 | loss, loss1, loss2, loss3, loss4 = 0,0,0,0,0 235 | 236 | for i, (X, X_scale, m_scale) in enumerate(train_loader): 237 | 238 | X_batch = Variable(X.float().to(device)) 239 | X_scale_batch = Variable(X_scale.float().to(device)) 240 | m_scale_batch = Variable(m_scale.float().to(device)) 241 | 242 | out_m_batch, out_c_batch = net(X_batch, n_modules, n_genes, n_comps, cmMat) 243 | loss_batch, loss1_batch, loss2_batch, loss3_batch, loss4_batch = myLoss(out_m_batch, out_c_batch, 244 | lamb1 = LAMB_BA, lamb2 = LAMB_NG, lamb3 = LAMB_CELL, lamb4 = LAMB_MOD, 245 | geneScale = X_scale_batch, moduleScale = m_scale_batch) 246 | 247 | optimizer.zero_grad() 248 | loss_batch.backward() 249 | optimizer.step() 250 | 251 | loss += loss_batch.cpu().data.numpy() 252 | loss1 += loss1_batch.cpu().data.numpy() 253 | loss2 += loss2_batch.cpu().data.numpy() 254 | loss3 += loss3_batch.cpu().data.numpy() 255 | loss4 += loss4_batch.cpu().data.numpy() 256 | 257 | #print('epoch: %02d, loss1: %.8f, loss2: %.8f, loss3: %.8f, loss4: %.8f, loss: %.8f' % (epoch+1, loss1, loss2, loss3, loss4, loss)) 258 | file_loss.write('epoch: %02d, loss1: %.8f, loss2: %.8f, loss3: %.8f, loss4: %.8f, loss: %.8f. \n' % (epoch+1, loss1, loss2, loss3, loss4, loss)) 259 | 260 | loss_v.append(loss) 261 | loss_v1.append(loss1) 262 | loss_v2.append(loss2) 263 | loss_v3.append(loss3) 264 | loss_v4.append(loss4) 265 | 266 | # ============================================================================= 267 | end = time.time() 268 | print("Training time: ", end - start) 269 | 270 | file_loss.close() 271 | plt.plot(loss_v, '--') 272 | plt.plot(loss_v1) 273 | plt.plot(loss_v2) 274 | plt.plot(loss_v3) 275 | plt.plot(loss_v4) 276 | plt.legend(['total', 'balance', 'negative', 'cellVar', 'moduleVar']); 277 | imgName = './' + res_dir + '/loss_' + timestr + ".png" 278 | plt.savefig(imgName) 279 | timeName = './' + res_dir + '/time_' + timestr + ".txt" 280 | f = open(timeName, "a") 281 | runTimeStr = str(end - start) 282 | f.write(runTimeStr) 283 | f.close() 284 | 285 | #save model 286 | model_name = './' + res_dir + '/model_' + timestr + '.pkl' 287 | torch.save(net, model_name) 288 | print("Trained model saved.") 289 | #load model 290 | # net1 = torch.load('./output/model_GSE103322_m171_top20_20201012-172505.pkl') 291 | 292 | # for name, param in net.named_parameters(): 293 | # print(name, '___', param) 294 | # print(net.named_parameters()) 295 | # net.state_dict() 296 | 297 | # 3: gradient by refitting 298 | print("Start to calculate gradient...") 299 | # ============================================================================= 300 | n_common = geneExpr.shape[1] 301 | # Dataloader 302 | dataloader_params = {'batch_size': 1, 303 | 'shuffle': False, 304 | 'num_workers': 0, 305 | 'pin_memory': False} 306 | # test_loader = torch.utils.data.DataLoader( 307 | # torch.utils.data.TensorDataset(X), 308 | # **dataloader_params) 309 | dataSet = MyDataset(X, geneExprScale, module_scale) 310 | test_loader = torch.utils.data.DataLoader(dataset=dataSet, 311 | **dataloader_params) 312 | 313 | 314 | # training 315 | # for i, item in enumerate(train_loader): # 162 316 | df_grad_cell_all = np.zeros((n_cells, n_common, n_modules), dtype='f') 317 | for i, (X, X_scale, m_scale) in tqdm(enumerate(test_loader)): 318 | # X_batch, scale_batch , b_scale_batch= Variable(next(training_loader_iter)[0]) 319 | # X_batch = Variable(item[0]) 320 | X_batch = Variable(X.float().to(device)) 321 | X_scale_batch = Variable(X_scale.float().to(device)) 322 | m_scale_batch = Variable(m_scale.float().to(device)) 323 | # print(X_batch.shape) 324 | # print(X_scale_batch.shape) 325 | 326 | out_m_batch, out_c_batch = net(X_batch, n_modules, n_genes, n_comps, cmMat) 327 | loss_batch, loss1_batch, loss2_batch, loss3_batch, loss4_batch = myLoss(out_m_batch, out_c_batch, 328 | lamb1 = LAMB_BA, lamb2 = LAMB_NG, lamb3 = LAMB_CELL, lamb4 = LAMB_MOD, 329 | geneScale = X_scale_batch, moduleScale = m_scale_batch) 330 | # print(loss_batch) 331 | # back propagation 332 | optimizer.zero_grad() 333 | loss_batch.backward() 334 | # print("Model's state_dict:") 335 | # for param_tensor in net.state_dict(): 336 | # print(param_tensor, "\t", net.state_dict()[param_tensor].size()) 337 | #print(net.m_encoder[0][0].weight.grad.numpy()) 338 | #print(net.m_encoder[0][0].weight.grad.numpy().sum()) 339 | 340 | #------------------------------ 341 | id_weight = 0 342 | id_module = 0 343 | countK = 1 344 | multi_tmp = torch.randn(5) 345 | #df_weight = np.zeros((n_common, n_modules), dtype='f') 346 | df_grad_cell_i = np.zeros((n_common, n_modules), dtype='f') 347 | box1 = torch.randn(5) 348 | box2 = torch.randn(5) 349 | #box3 = torch.randn(5) 350 | for name, param in net.named_parameters(): 351 | id_weight += 1 352 | # print(name, '__\n', ) 353 | # print(param.data.shape) 354 | 355 | if countK == 1: 356 | box1 = param 357 | if countK == 2: 358 | box2 = param 359 | if countK == 3: 360 | #box3 = param 361 | countK = 0 362 | 363 | ##print(id_weight, ',,,,', countK) 364 | 365 | if id_weight % 3 == 0: 366 | # print(box1.shape) 367 | # print(box2.shape) 368 | # print(box3.shape) 369 | # count_tmp += 1 370 | # print(count_tmp) 371 | ###multi_tmp = torch.matmul(torch.t(box1), torch.t(box2)) 372 | multi_tmp = torch.matmul(torch.t(box1.grad), torch.t(box2.grad)) #use gradient instead of weight! 373 | # multi_tmp = multi_tmp.view(-1) 374 | # print(multi_tmp.shape) 375 | para_gene = multi_tmp.view(-1).detach().numpy() 376 | ##print(para_gene.shape) 377 | 378 | genes = moduleGene.iloc[id_module,:].values.astype(str) 379 | genes = [g for g in genes if g != 'nan'] 380 | temp = geneExpr.copy() 381 | temp.loc[:, [g for g in gene_names if g not in genes]] = 0 382 | sel_gene_col = temp.sum(axis = 0) 383 | unit_sel_gene = sel_gene_col / sel_gene_col 384 | 385 | df_grad_cell_i[:, id_module] = np.multiply(para_gene, unit_sel_gene) 386 | id_module += 1 387 | 388 | countK += 1 389 | #------------------------------- 390 | df_grad_cell_all[i, :, :] = df_grad_cell_i 391 | 392 | # if i == 0: #debug 393 | # break 394 | 395 | optimizer.step() 396 | print("Gradient calculation is done.") 397 | mySaveGene = geneExpr.columns 398 | mySaveModule = moduleGene.index 399 | mySaveCell = geneExpr.index 400 | 401 | # Saving the objects: 402 | if gradName == 'NULL': 403 | # user do not define file name of balance 404 | gradName = './' + res_dir + '/calcGrad_' + timestr +'.pkl' 405 | 406 | with open(gradName, 'wb') as f: # Python 3: open(..., 'wb') 407 | pickle.dump([df_grad_cell_all, mySaveGene, mySaveModule, mySaveCell], f) 408 | 409 | # # Getting back the objects: 410 | # with open('objs.pkl') as f: # Python 3: open(..., 'rb') 411 | # obj0, obj1, obj2 = pickle.load(f) 412 | 413 | 414 | print("scFEA gradient calculation job finished. Check result in pkl extension file.") 415 | 416 | return 417 | 418 | 419 | 420 | def parse_arguments(parser): 421 | 422 | 423 | parser.add_argument('--data_dir', type=str, default='data', metavar='', 424 | help='The data directory for scFEA model files.') 425 | parser.add_argument('--input_dir', type=str, default='data', metavar='', 426 | help='The data directory for single cell input data.') 427 | parser.add_argument('--res_dir', type=str, default='output', metavar='', 428 | help='The data directory for result [output]. The output of scFEA includes two matrices, predicted metabolic flux and metabolites stress at single cell resolution.') 429 | parser.add_argument('--test_file', type=str, default='Melissa_full.csv', 430 | help='The test SC file [input]. The input of scFEA is a single cell profile matrix, where row is gene and column is cell. Example datasets are provided in /data/ folder. The input can be raw counts or normalised counts. The logarithm would be performed if value larger than 30.') 431 | parser.add_argument('--moduleGene_file', type=str, default='module_gene_m168.csv', 432 | help='The table contains genes for each module. We provide human and mouse two models in scFEA. For human model, please use module_gene_m168.csv which is default. All candidate moduleGene files are provided in /data/ folder.') 433 | parser.add_argument('--stoichiometry_matrix', type=str, default='cmMat_c70_m168.csv', 434 | help='The table describes relationship between compounds and modules. Each row is an intermediate metabolite and each column is metabolic module. For human model, please use cmMat_171.csv which is default. All candidate stoichiometry matrices are provided in /data/ folder.') 435 | parser.add_argument('--cName_file', type=str, default='cName_c70_m168.csv', 436 | help='The name of compounds. The table contains two rows. First row is compounds name and second row is corresponding id.') 437 | parser.add_argument('--sc_imputation', type=eval, default='False', choices=[True, False], 438 | help='Whether perform imputation for SC dataset (recommend set to for 10x data).') 439 | parser.add_argument('--output_gradient_file', type=str, default='NULL', 440 | help='User defined calculated gradient file name. (please use .pkl extension)') 441 | parser.add_argument('--train_epoch', type=int, default=100, nargs='?', 442 | help='User defined EPOCH (training iteration).') 443 | # parser.add_argument('--output_flux_file', type=str, default='NULL', 444 | # help='User defined predicted flux file name.') 445 | # parser.add_argument('--output_balance_file', type=str, default='NULL', 446 | # help='User defined predicted balance file name.') 447 | 448 | args = parser.parse_args() 449 | 450 | return args 451 | 452 | 453 | if __name__ == "__main__": 454 | parser = argparse.ArgumentParser( 455 | description='scFEA-gradient, calculate gradient by refitting the model of each cell. Please visit http://scflux.org/ for more instruction.') 456 | args = parse_arguments(parser) 457 | main(args) 458 | -------------------------------------------------------------------------------- /src/util.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | 4 | @author: wnchang 5 | """ 6 | 7 | import torch 8 | 9 | def pearsonr(x, y): 10 | """ 11 | Mimics `scipy.stats.pearsonr` 12 | 13 | Arguments 14 | --------- 15 | x : 1D torch.Tensor 16 | y : 1D torch.Tensor 17 | 18 | Returns 19 | ------- 20 | r_val : float 21 | pearsonr correlation coefficient between x and y 22 | 23 | Scipy docs ref: 24 | https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.pearsonr.html 25 | 26 | Scipy code ref: 27 | https://github.com/scipy/scipy/blob/v0.19.0/scipy/stats/stats.py#L2975-L3033 28 | Example: 29 | >>> x = np.random.randn(100) 30 | >>> y = np.random.randn(100) 31 | >>> sp_corr = scipy.stats.pearsonr(x, y)[0] 32 | >>> th_corr = pearsonr(torch.from_numpy(x), torch.from_numpy(y)) 33 | >>> np.allclose(sp_corr, th_corr) 34 | """ 35 | mean_x = torch.mean(x) 36 | mean_y = torch.mean(y) 37 | xm = x.sub(mean_x) 38 | ym = y.sub(mean_y) 39 | r_num = xm.dot(ym) 40 | r_den = torch.norm(xm, 2) * torch.norm(ym, 2) 41 | r_val = r_num / r_den 42 | return r_val -------------------------------------------------------------------------------- /supplementary data/Supplementary Figure S1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/supplementary data/Supplementary Figure S1.pdf -------------------------------------------------------------------------------- /supplementary data/Supplementary Figure S2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/supplementary data/Supplementary Figure S2.pdf -------------------------------------------------------------------------------- /supplementary data/Supplementary Figure S3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/supplementary data/Supplementary Figure S3.pdf -------------------------------------------------------------------------------- /supplementary data/Supplementary Figure S4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/supplementary data/Supplementary Figure S4.pdf -------------------------------------------------------------------------------- /supplementary data/Supplementary Figure S5.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/supplementary data/Supplementary Figure S5.pdf -------------------------------------------------------------------------------- /supplementary data/Supplementary Figure S6.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/supplementary data/Supplementary Figure S6.pdf -------------------------------------------------------------------------------- /supplementary data/Supplementary Figures and Tables.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/supplementary data/Supplementary Figures and Tables.pdf -------------------------------------------------------------------------------- /supplementary data/Supplementary Table S2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/supplementary data/Supplementary Table S2.xlsx -------------------------------------------------------------------------------- /supplementary data/Supplementary Table S3.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/supplementary data/Supplementary Table S3.xlsx -------------------------------------------------------------------------------- /supplementary data/Supplementary Table S4.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/changwn/scFEA/4c1fb76d52f07bafad84ce7686ad7c3acfcf0126/supplementary data/Supplementary Table S4.xlsx --------------------------------------------------------------------------------