├── 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
--------------------------------------------------------------------------------