# HG changeset patch # User francesco_lapi # Date 1759158801 0 # Node ID c6ea189ea7e994c12150cee936b4dada77525d93 # Parent 97eea560a10fa186b50922dc731aa5bbeb761c4a Uploaded diff -r 97eea560a10f -r c6ea189ea7e9 COBRAxy/local/models/ENGRO2.xml --- a/COBRAxy/local/models/ENGRO2.xml Mon Sep 29 10:33:26 2025 +0000 +++ b/COBRAxy/local/models/ENGRO2.xml Mon Sep 29 15:13:21 2025 +0000 @@ -10771,7 +10771,6 @@ - @@ -11777,7 +11776,6 @@ - @@ -14699,13 +14697,13 @@ - - - -

ENSG: ENSG00000141526

-

HGNC ID: HGNC:10924

-

HGNC symbol: SLC16A3

-

entrez_id: 9123

+ + + +

ENSG: ENSG00000118596

+

HGNC ID: HGNC:10928

+

HGNC symbol: SLC16A7

+

entrez_id: 9194

@@ -14719,13 +14717,43 @@
- - - -

ENSG: ENSG00000118596

-

HGNC ID: HGNC:10928

-

HGNC symbol: SLC16A7

-

entrez_id: 9194

+ + + +

ENSG: ENSG00000141526

+

HGNC ID: HGNC:10924

+

HGNC symbol: SLC16A3

+

entrez_id: 9123

+ +
+
+ + + +

ENSG: ENSG00000106633

+

HGNC ID: HGNC:4195

+

HGNC symbol: GCK

+

entrez_id: 2645

+ +
+
+ + + +

ENSG: ENSG00000160883

+

HGNC ID: HGNC:4925

+

HGNC symbol: HK3

+

entrez_id: 3101

+ +
+
+ + + +

ENSG: ENSG00000159399

+

HGNC ID: HGNC:4923

+

HGNC symbol: HK2

+

entrez_id: 3099

@@ -14739,36 +14767,6 @@
- - - -

ENSG: ENSG00000160883

-

HGNC ID: HGNC:4925

-

HGNC symbol: HK3

-

entrez_id: 3101

- -
-
- - - -

ENSG: ENSG00000106633

-

HGNC ID: HGNC:4195

-

HGNC symbol: GCK

-

entrez_id: 2645

- -
-
- - - -

ENSG: ENSG00000159399

-

HGNC ID: HGNC:4923

-

HGNC symbol: HK2

-

entrez_id: 3099

- -
-
@@ -14779,6 +14777,16 @@ + + + +

ENSG: ENSG00000141349

+

HGNC ID: HGNC:24861

+

HGNC symbol: G6PC3

+

entrez_id: 92579

+ +
+
@@ -14799,16 +14807,6 @@ - - - -

ENSG: ENSG00000141349

-

HGNC ID: HGNC:24861

-

HGNC symbol: G6PC3

-

entrez_id: 92579

- -
-
@@ -14819,13 +14817,13 @@ - - - -

ENSG: ENSG00000141959

-

HGNC ID: HGNC:8876

-

HGNC symbol: PFKL

-

entrez_id: 5211

+ + + +

ENSG: ENSG00000067057

+

HGNC ID: HGNC:8878

+

HGNC symbol: PFKP

+

entrez_id: 5214

@@ -14839,13 +14837,23 @@
- - - -

ENSG: ENSG00000067057

-

HGNC ID: HGNC:8878

-

HGNC symbol: PFKP

-

entrez_id: 5214

+ + + +

ENSG: ENSG00000141959

+

HGNC ID: HGNC:8876

+

HGNC symbol: PFKL

+

entrez_id: 5211

+ +
+
+ + + +

ENSG: ENSG00000165140

+

HGNC ID: HGNC:3606

+

HGNC symbol: FBP1

+

entrez_id: 2203

@@ -14859,26 +14867,6 @@
- - - -

ENSG: ENSG00000165140

-

HGNC ID: HGNC:3606

-

HGNC symbol: FBP1

-

entrez_id: 2203

- -
-
- - - -

ENSG: ENSG00000109107

-

HGNC ID: HGNC:418

-

HGNC symbol: ALDOC

-

entrez_id: 230

- -
-
@@ -14899,6 +14887,16 @@ + + + +

ENSG: ENSG00000109107

+

HGNC ID: HGNC:418

+

HGNC symbol: ALDOC

+

entrez_id: 230

+ +
+
@@ -14949,6 +14947,16 @@ + + + +

ENSG: ENSG00000164708

+

HGNC ID: HGNC:8889

+

HGNC symbol: PGAM2

+

entrez_id: 5224

+ +
+
@@ -14969,16 +14977,6 @@ - - - -

ENSG: ENSG00000164708

-

HGNC ID: HGNC:8889

-

HGNC symbol: PGAM2

-

entrez_id: 5224

- -
-
@@ -15009,6 +15007,16 @@ + + + +

ENSG: ENSG00000143627

+

HGNC ID: HGNC:9020

+

HGNC symbol: PKLR

+

entrez_id: 5313

+ +
+
@@ -15019,13 +15027,13 @@ - - - -

ENSG: ENSG00000143627

-

HGNC ID: HGNC:9020

-

HGNC symbol: PKLR

-

entrez_id: 5313

+ + + +

ENSG: ENSG00000134333

+

HGNC ID: HGNC:6535

+

HGNC symbol: LDHA

+

entrez_id: 3939

@@ -15039,13 +15047,13 @@
- - - -

ENSG: ENSG00000151116

-

HGNC ID: HGNC:30866

-

HGNC symbol: UEVLD

-

entrez_id: 55293

+ + + +

ENSG: ENSG00000111716

+

HGNC ID: HGNC:6541

+

HGNC symbol: LDHB

+

entrez_id: 3945

@@ -15059,26 +15067,6 @@
- - - -

ENSG: ENSG00000134333

-

HGNC ID: HGNC:6535

-

HGNC symbol: LDHA

-

entrez_id: 3939

- -
-
- - - -

ENSG: ENSG00000111716

-

HGNC ID: HGNC:6541

-

HGNC symbol: LDHB

-

entrez_id: 3945

- -
-
@@ -15089,6 +15077,26 @@ + + + +

ENSG: ENSG00000151116

+

HGNC ID: HGNC:30866

+

HGNC symbol: UEVLD

+

entrez_id: 55293

+ +
+
+ + + +

ENSG: ENSG00000101911

+

HGNC ID: HGNC:9465

+

HGNC symbol: PRPS2

+

entrez_id: 5634

+ +
+
@@ -15099,16 +15107,6 @@ - - - -

ENSG: ENSG00000101911

-

HGNC ID: HGNC:9465

-

HGNC symbol: PRPS2

-

entrez_id: 5634

- -
-
@@ -15129,6 +15127,16 @@ + + + +

ENSG: ENSG00000049239

+

HGNC ID: HGNC:4795

+

HGNC symbol: H6PD

+

entrez_id: 9563

+ +
+
@@ -15139,16 +15147,6 @@ - - - -

ENSG: ENSG00000049239

-

HGNC ID: HGNC:4795

-

HGNC symbol: H6PD

-

entrez_id: 9563

- -
-
@@ -15169,6 +15167,16 @@ + + + +

ENSG: ENSG00000007350

+

HGNC ID: HGNC:11835

+

HGNC symbol: TKTL1

+

entrez_id: 8277

+ +
+
@@ -15189,13 +15197,13 @@ - - - -

ENSG: ENSG00000007350

-

HGNC ID: HGNC:11835

-

HGNC symbol: TKTL1

-

entrez_id: 8277

+ + + +

ENSG: ENSG00000235376

+

HGNC ID: HGNC:45241

+

HGNC symbol: RPEL1

+

entrez_id: 729020

@@ -15209,16 +15217,6 @@
- - - -

ENSG: ENSG00000235376

-

HGNC ID: HGNC:45241

-

HGNC symbol: RPEL1

-

entrez_id: 729020

- -
-
@@ -15229,6 +15227,26 @@ + + + +

ENSG: ENSG00000110435

+

HGNC ID: HGNC:21350

+

HGNC symbol: PDHX

+

entrez_id: 8050

+ +
+
+ + + +

ENSG: ENSG00000163114

+

HGNC ID: HGNC:8807

+

HGNC symbol: PDHA2

+

entrez_id: 5161

+ +
+
@@ -15239,13 +15257,23 @@ - - - -

ENSG: ENSG00000163114

-

HGNC ID: HGNC:8807

-

HGNC symbol: PDHA2

-

entrez_id: 5161

+ + + +

ENSG: ENSG00000131828

+

HGNC ID: HGNC:8806

+

HGNC symbol: PDHA1

+

entrez_id: 5160

+ +
+
+ + + +

ENSG: ENSG00000150768

+

HGNC ID: HGNC:2896

+

HGNC symbol: DLAT

+

entrez_id: 1737

@@ -15259,36 +15287,6 @@
- - - -

ENSG: ENSG00000131828

-

HGNC ID: HGNC:8806

-

HGNC symbol: PDHA1

-

entrez_id: 5160

- -
-
- - - -

ENSG: ENSG00000110435

-

HGNC ID: HGNC:21350

-

HGNC symbol: PDHX

-

entrez_id: 8050

- -
-
- - - -

ENSG: ENSG00000150768

-

HGNC ID: HGNC:2896

-

HGNC symbol: DLAT

-

entrez_id: 1737

- -
-
@@ -15319,6 +15317,16 @@ + + + +

ENSG: ENSG00000100412

+

HGNC ID: HGNC:118

+

HGNC symbol: ACO2

+

entrez_id: 50

+ +
+
@@ -15329,16 +15337,6 @@ - - - -

ENSG: ENSG00000100412

-

HGNC ID: HGNC:118

-

HGNC symbol: ACO2

-

entrez_id: 50

- -
-
@@ -15349,6 +15347,16 @@ + + + +

ENSG: ENSG00000166411

+

HGNC ID: HGNC:5384

+

HGNC symbol: IDH3A

+

entrez_id: 3419

+ +
+
@@ -15359,16 +15367,6 @@ - - - -

ENSG: ENSG00000166411

-

HGNC ID: HGNC:5384

-

HGNC symbol: IDH3A

-

entrez_id: 3419

- -
-
@@ -15379,6 +15377,16 @@ + + + +

ENSG: ENSG00000105953

+

HGNC ID: HGNC:8124

+

HGNC symbol: OGDH

+

entrez_id: 4967

+ +
+
@@ -15389,16 +15397,6 @@ - - - -

ENSG: ENSG00000105953

-

HGNC ID: HGNC:8124

-

HGNC symbol: OGDH

-

entrez_id: 4967

- -
-
@@ -15519,6 +15517,16 @@ + + + +

ENSG: ENSG00000014641

+

HGNC ID: HGNC:6970

+

HGNC symbol: MDH1

+

entrez_id: 4190

+ +
+
@@ -15529,16 +15537,6 @@ - - - -

ENSG: ENSG00000014641

-

HGNC ID: HGNC:6970

-

HGNC symbol: MDH1

-

entrez_id: 4190

- -
-
@@ -15569,6 +15567,16 @@ + + + +

ENSG: ENSG00000107902

+

HGNC ID: HGNC:30042

+

HGNC symbol: LHPP

+

entrez_id: 64077

+ +
+
@@ -15579,23 +15587,153 @@ - - - -

ENSG: ENSG00000107902

-

HGNC ID: HGNC:30042

-

HGNC symbol: LHPP

-

entrez_id: 64077

- -
-
- - - -

ENSG: ENSG00000130414

-

HGNC ID: HGNC:7684

-

HGNC symbol: NDUFA10

-

entrez_id: 4705

+ + + +

ENSG: ENSG00000213619

+

HGNC ID: HGNC:7710

+

HGNC symbol: NDUFS3

+

entrez_id: 4722

+ +
+
+ + + +

ENSG: ENSG00000165264

+

HGNC ID: HGNC:7701

+

HGNC symbol: NDUFB6

+

entrez_id: 4712

+ +
+
+ + + +

ENSG: ENSG00000178127

+

HGNC ID: HGNC:7717

+

HGNC symbol: NDUFV2

+

entrez_id: 4729

+ +
+
+ + + +

ENSG: ENSG00000119013

+

HGNC ID: HGNC:7698

+

HGNC symbol: NDUFB3

+

entrez_id: 4709

+ +
+
+ + + +

ENSG: ENSG00000147684

+

HGNC ID: HGNC:7704

+

HGNC symbol: NDUFB9

+

entrez_id: 4715

+ +
+
+ + + +

ENSG: ENSG00000004779

+

HGNC ID: HGNC:7694

+

HGNC symbol: NDUFAB1

+

entrez_id: 4706

+ +
+
+ + + +

ENSG: ENSG00000125356

+

HGNC ID: HGNC:7683

+

HGNC symbol: NDUFA1

+

entrez_id: 4694

+ +
+
+ + + +

ENSG: ENSG00000139180

+

HGNC ID: HGNC:7693

+

HGNC symbol: NDUFA9

+

entrez_id: 4704

+ +
+
+ + + +

ENSG: ENSG00000023228

+

HGNC ID: HGNC:7707

+

HGNC symbol: NDUFS1

+

entrez_id: 4719

+ +
+
+ + + +

ENSG: ENSG00000174886

+

HGNC ID: HGNC:20371

+

HGNC symbol: NDUFA11

+

entrez_id: 126328

+ +
+
+ + + +

ENSG: ENSG00000147123

+

HGNC ID: HGNC:20372

+

HGNC symbol: NDUFB11

+

entrez_id: 54539

+ +
+
+ + + +

ENSG: ENSG00000099795

+

HGNC ID: HGNC:7702

+

HGNC symbol: NDUFB7

+

entrez_id: 4713

+ +
+
+ + + +

ENSG: ENSG00000119421

+

HGNC ID: HGNC:7692

+

HGNC symbol: NDUFA8

+

entrez_id: 4702

+ +
+
+ + + +

ENSG: ENSG00000131495

+

HGNC ID: HGNC:7685

+

HGNC symbol: NDUFA2

+

entrez_id: 4695

+ +
+
+ + + +

ENSG: ENSG00000110717

+

HGNC ID: HGNC:7715

+

HGNC symbol: NDUFS8

+

entrez_id: 4728

@@ -15609,16 +15747,6 @@
- - - -

ENSG: ENSG00000131495

-

HGNC ID: HGNC:7685

-

HGNC symbol: NDUFA2

-

entrez_id: 4695

- -
-
@@ -15629,23 +15757,33 @@ - - - -

ENSG: ENSG00000119421

-

HGNC ID: HGNC:7692

-

HGNC symbol: NDUFA8

-

entrez_id: 4702

- -
-
- - - -

ENSG: ENSG00000178127

-

HGNC ID: HGNC:7717

-

HGNC symbol: NDUFV2

-

entrez_id: 4729

+ + + +

ENSG: ENSG00000198886

+

HGNC ID: HGNC:7459

+

HGNC symbol: MT-ND4

+

entrez_id: 4538

+ +
+
+ + + +

ENSG: ENSG00000090266

+

HGNC ID: HGNC:7697

+

HGNC symbol: NDUFB2

+

entrez_id: 4708

+ +
+
+ + + +

ENSG: ENSG00000158864

+

HGNC ID: HGNC:7708

+

HGNC symbol: NDUFS2

+

entrez_id: 4720

@@ -15659,43 +15797,13 @@
- - - -

ENSG: ENSG00000198763

-

HGNC ID: HGNC:7456

-

HGNC symbol: MT-ND2

-

entrez_id: 4536

- -
-
- - - -

ENSG: ENSG00000165264

-

HGNC ID: HGNC:7701

-

HGNC symbol: NDUFB6

-

entrez_id: 4712

- -
-
- - - -

ENSG: ENSG00000128609

-

HGNC ID: HGNC:7688

-

HGNC symbol: NDUFA5

-

entrez_id: 4698

- -
-
- - - -

ENSG: ENSG00000140990

-

HGNC ID: HGNC:7696

-

HGNC symbol: NDUFB10

-

entrez_id: 4716

+ + + +

ENSG: ENSG00000168653

+

HGNC ID: HGNC:7712

+

HGNC symbol: NDUFS5

+

entrez_id: 4725

@@ -15709,13 +15817,133 @@
- - - -

ENSG: ENSG00000147123

-

HGNC ID: HGNC:20372

-

HGNC symbol: NDUFB11

-

entrez_id: 54539

+ + + +

ENSG: ENSG00000198786

+

HGNC ID: HGNC:7461

+

HGNC symbol: MT-ND5

+

entrez_id: 4540

+ +
+
+ + + +

ENSG: ENSG00000198840

+

HGNC ID: HGNC:7458

+

HGNC symbol: MT-ND3

+

entrez_id: 4537

+ +
+
+ + + +

ENSG: ENSG00000212907

+

HGNC ID: HGNC:7460

+

HGNC symbol: MT-ND4L

+

entrez_id: 4539

+ +
+
+ + + +

ENSG: ENSG00000183648

+

HGNC ID: HGNC:7695

+

HGNC symbol: NDUFB1

+

entrez_id: 4707

+ +
+
+ + + +

ENSG: ENSG00000128609

+

HGNC ID: HGNC:7688

+

HGNC symbol: NDUFA5

+

entrez_id: 4698

+ +
+
+ + + +

ENSG: ENSG00000198888

+

HGNC ID: HGNC:7455

+

HGNC symbol: MT-ND1

+

entrez_id: 4535

+ +
+
+ + + +

ENSG: ENSG00000140990

+

HGNC ID: HGNC:7696

+

HGNC symbol: NDUFB10

+

entrez_id: 4716

+ +
+
+ + + +

ENSG: ENSG00000130414

+

HGNC ID: HGNC:7684

+

HGNC symbol: NDUFA10

+

entrez_id: 4705

+ +
+
+ + + +

ENSG: ENSG00000184983

+

HGNC ID: HGNC:7690

+

HGNC symbol: NDUFA6

+

entrez_id: 4700

+ +
+
+ + + +

ENSG: ENSG00000166136

+

HGNC ID: HGNC:7703

+

HGNC symbol: NDUFB8

+

entrez_id: 4714

+ +
+
+ + + +

ENSG: ENSG00000198763

+

HGNC ID: HGNC:7456

+

HGNC symbol: MT-ND2

+

entrez_id: 4536

+ +
+
+ + + +

ENSG: ENSG00000136521

+

HGNC ID: HGNC:7700

+

HGNC symbol: NDUFB5

+

entrez_id: 4711

+ +
+
+ + + +

ENSG: ENSG00000186010

+

HGNC ID: HGNC:17194

+

HGNC symbol: NDUFA13

+

entrez_id: 51079

@@ -15729,36 +15957,6 @@
- - - -

ENSG: ENSG00000174886

-

HGNC ID: HGNC:20371

-

HGNC symbol: NDUFA11

-

entrez_id: 126328

- -
-
- - - -

ENSG: ENSG00000183648

-

HGNC ID: HGNC:7695

-

HGNC symbol: NDUFB1

-

entrez_id: 4707

- -
-
- - - -

ENSG: ENSG00000136521

-

HGNC ID: HGNC:7700

-

HGNC symbol: NDUFB5

-

entrez_id: 4711

- -
-
@@ -15779,203 +15977,23 @@ - - - -

ENSG: ENSG00000198840

-

HGNC ID: HGNC:7458

-

HGNC symbol: MT-ND3

-

entrez_id: 4537

- -
-
- - - -

ENSG: ENSG00000099795

-

HGNC ID: HGNC:7702

-

HGNC symbol: NDUFB7

-

entrez_id: 4713

- -
-
- - - -

ENSG: ENSG00000198786

-

HGNC ID: HGNC:7461

-

HGNC symbol: MT-ND5

-

entrez_id: 4540

- -
-
- - - -

ENSG: ENSG00000158864

-

HGNC ID: HGNC:7708

-

HGNC symbol: NDUFS2

-

entrez_id: 4720

- -
-
- - - -

ENSG: ENSG00000198888

-

HGNC ID: HGNC:7455

-

HGNC symbol: MT-ND1

-

entrez_id: 4535

- -
-
- - - -

ENSG: ENSG00000147684

-

HGNC ID: HGNC:7704

-

HGNC symbol: NDUFB9

-

entrez_id: 4715

- -
-
- - - -

ENSG: ENSG00000090266

-

HGNC ID: HGNC:7697

-

HGNC symbol: NDUFB2

-

entrez_id: 4708

- -
-
- - - -

ENSG: ENSG00000166136

-

HGNC ID: HGNC:7703

-

HGNC symbol: NDUFB8

-

entrez_id: 4714

- -
-
- - - -

ENSG: ENSG00000212907

-

HGNC ID: HGNC:7460

-

HGNC symbol: MT-ND4L

-

entrez_id: 4539

- -
-
- - - -

ENSG: ENSG00000168653

-

HGNC ID: HGNC:7712

-

HGNC symbol: NDUFS5

-

entrez_id: 4725

- -
-
- - - -

ENSG: ENSG00000186010

-

HGNC ID: HGNC:17194

-

HGNC symbol: NDUFA13

-

entrez_id: 51079

- -
-
- - - -

ENSG: ENSG00000213619

-

HGNC ID: HGNC:7710

-

HGNC symbol: NDUFS3

-

entrez_id: 4722

- -
-
- - - -

ENSG: ENSG00000119013

-

HGNC ID: HGNC:7698

-

HGNC symbol: NDUFB3

-

entrez_id: 4709

- -
-
- - - -

ENSG: ENSG00000004779

-

HGNC ID: HGNC:7694

-

HGNC symbol: NDUFAB1

-

entrez_id: 4706

- -
-
- - - -

ENSG: ENSG00000110717

-

HGNC ID: HGNC:7715

-

HGNC symbol: NDUFS8

-

entrez_id: 4728

- -
-
- - - -

ENSG: ENSG00000139180

-

HGNC ID: HGNC:7693

-

HGNC symbol: NDUFA9

-

entrez_id: 4704

- -
-
- - - -

ENSG: ENSG00000198886

-

HGNC ID: HGNC:7459

-

HGNC symbol: MT-ND4

-

entrez_id: 4538

- -
-
- - - -

ENSG: ENSG00000125356

-

HGNC ID: HGNC:7683

-

HGNC symbol: NDUFA1

-

entrez_id: 4694

- -
-
- - - -

ENSG: ENSG00000184983

-

HGNC ID: HGNC:7690

-

HGNC symbol: NDUFA6

-

entrez_id: 4700

- -
-
- - - -

ENSG: ENSG00000023228

-

HGNC ID: HGNC:7707

-

HGNC symbol: NDUFS1

-

entrez_id: 4719

+ + + +

ENSG: ENSG00000171503

+

HGNC ID: HGNC:3483

+

HGNC symbol: ETFDH

+

entrez_id: 2110

+ +
+
+ + + +

ENSG: ENSG00000105379

+

HGNC ID: HGNC:3482

+

HGNC symbol: ETFB

+

entrez_id: 2109

@@ -15989,66 +16007,6 @@
- - - -

ENSG: ENSG00000105379

-

HGNC ID: HGNC:3482

-

HGNC symbol: ETFB

-

entrez_id: 2109

- -
-
- - - -

ENSG: ENSG00000171503

-

HGNC ID: HGNC:3483

-

HGNC symbol: ETFDH

-

entrez_id: 2110

- -
-
- - - -

ENSG: ENSG00000140740

-

HGNC ID: HGNC:12586

-

HGNC symbol: UQCRC2

-

entrez_id: 7385

- -
-
- - - -

ENSG: ENSG00000169021

-

HGNC ID: HGNC:12587

-

HGNC symbol: UQCRFS1

-

entrez_id: 7386

- -
-
- - - -

ENSG: ENSG00000179091

-

HGNC ID: HGNC:2579

-

HGNC symbol: CYC1

-

entrez_id: 1537

- -
-
- - - -

ENSG: ENSG00000010256

-

HGNC ID: HGNC:12585

-

HGNC symbol: UQCRC1

-

entrez_id: 7384

- -
-
@@ -16059,36 +16017,6 @@ - - - -

ENSG: ENSG00000184076

-

HGNC ID: HGNC:30863

-

HGNC symbol: UQCR10

-

entrez_id: 29796

- -
-
- - - -

ENSG: ENSG00000127540

-

HGNC ID: HGNC:30862

-

HGNC symbol: UQCR11

-

entrez_id: 10975

- -
-
- - - -

ENSG: ENSG00000198727

-

HGNC ID: HGNC:7427

-

HGNC symbol: MT-CYB

-

entrez_id: 4519

- -
-
@@ -16109,23 +16037,113 @@ - - - -

ENSG: ENSG00000198712

-

HGNC ID: HGNC:7421

-

HGNC symbol: MT-CO2

-

entrez_id: 4513

- -
-
- - - -

ENSG: ENSG00000131143

-

HGNC ID: HGNC:2265

-

HGNC symbol: COX4I1

-

entrez_id: 1327

+ + + +

ENSG: ENSG00000184076

+

HGNC ID: HGNC:30863

+

HGNC symbol: UQCR10

+

entrez_id: 29796

+ +
+
+ + + +

ENSG: ENSG00000198727

+

HGNC ID: HGNC:7427

+

HGNC symbol: MT-CYB

+

entrez_id: 4519

+ +
+
+ + + +

ENSG: ENSG00000140740

+

HGNC ID: HGNC:12586

+

HGNC symbol: UQCRC2

+

entrez_id: 7385

+ +
+
+ + + +

ENSG: ENSG00000010256

+

HGNC ID: HGNC:12585

+

HGNC symbol: UQCRC1

+

entrez_id: 7384

+ +
+
+ + + +

ENSG: ENSG00000169021

+

HGNC ID: HGNC:12587

+

HGNC symbol: UQCRFS1

+

entrez_id: 7386

+ +
+
+ + + +

ENSG: ENSG00000127540

+

HGNC ID: HGNC:30862

+

HGNC symbol: UQCR11

+

entrez_id: 10975

+ +
+
+ + + +

ENSG: ENSG00000179091

+

HGNC ID: HGNC:2579

+

HGNC symbol: CYC1

+

entrez_id: 1537

+ +
+
+ + + +

ENSG: ENSG00000131055

+

HGNC ID: HGNC:16232

+

HGNC symbol: COX4I2

+

entrez_id: 84701

+ +
+
+ + + +

ENSG: ENSG00000164919

+

HGNC ID: HGNC:2285

+

HGNC symbol: COX6C

+

entrez_id: 1345

+ +
+
+ + + +

ENSG: ENSG00000126267

+

HGNC ID: HGNC:2280

+

HGNC symbol: COX6B1

+

entrez_id: 1340

+ +
+
+ + + +

ENSG: ENSG00000198938

+

HGNC ID: HGNC:7422

+

HGNC symbol: MT-CO3

+

entrez_id: 4514

@@ -16139,56 +16157,6 @@
- - - -

ENSG: ENSG00000111775

-

HGNC ID: HGNC:2277

-

HGNC symbol: COX6A1

-

entrez_id: 1337

- -
-
- - - -

ENSG: ENSG00000131055

-

HGNC ID: HGNC:16232

-

HGNC symbol: COX4I2

-

entrez_id: 84701

- -
-
- - - -

ENSG: ENSG00000170516

-

HGNC ID: HGNC:24381

-

HGNC symbol: COX7B2

-

entrez_id: 170712

- -
-
- - - -

ENSG: ENSG00000127184

-

HGNC ID: HGNC:2292

-

HGNC symbol: COX7C

-

entrez_id: 1350

- -
-
- - - -

ENSG: ENSG00000126267

-

HGNC ID: HGNC:2280

-

HGNC symbol: COX6B1

-

entrez_id: 1340

- -
-
@@ -16199,13 +16167,53 @@ - - - -

ENSG: ENSG00000198804

-

HGNC ID: HGNC:7419

-

HGNC symbol: MT-CO1

-

entrez_id: 4512

+ + + +

ENSG: ENSG00000198712

+

HGNC ID: HGNC:7421

+

HGNC symbol: MT-CO2

+

entrez_id: 4513

+ +
+
+ + + +

ENSG: ENSG00000135940

+

HGNC ID: HGNC:2269

+

HGNC symbol: COX5B

+

entrez_id: 1329

+ +
+
+ + + +

ENSG: ENSG00000170516

+

HGNC ID: HGNC:24381

+

HGNC symbol: COX7B2

+

entrez_id: 170712

+ +
+
+ + + +

ENSG: ENSG00000131174

+

HGNC ID: HGNC:2291

+

HGNC symbol: COX7B

+

entrez_id: 1349

+ +
+
+ + + +

ENSG: ENSG00000111775

+

HGNC ID: HGNC:2277

+

HGNC symbol: COX6A1

+

entrez_id: 1337

@@ -16219,23 +16227,13 @@
- - - -

ENSG: ENSG00000131174

-

HGNC ID: HGNC:2291

-

HGNC symbol: COX7B

-

entrez_id: 1349

- -
-
- - - -

ENSG: ENSG00000164919

-

HGNC ID: HGNC:2285

-

HGNC symbol: COX6C

-

entrez_id: 1345

+ + + +

ENSG: ENSG00000187581

+

HGNC ID: HGNC:24382

+

HGNC symbol: COX8C

+

entrez_id: 341947

@@ -16249,6 +16247,16 @@
+ + + +

ENSG: ENSG00000176340

+

HGNC ID: HGNC:2294

+

HGNC symbol: COX8A

+

entrez_id: 1351

+ +
+
@@ -16259,43 +16267,153 @@ - - - -

ENSG: ENSG00000187581

-

HGNC ID: HGNC:24382

-

HGNC symbol: COX8C

-

entrez_id: 341947

- -
-
- - - -

ENSG: ENSG00000176340

-

HGNC ID: HGNC:2294

-

HGNC symbol: COX8A

-

entrez_id: 1351

- -
-
- - - -

ENSG: ENSG00000198938

-

HGNC ID: HGNC:7422

-

HGNC symbol: MT-CO3

-

entrez_id: 4514

- -
-
- - - -

ENSG: ENSG00000135940

-

HGNC ID: HGNC:2269

-

HGNC symbol: COX5B

-

entrez_id: 1329

+ + + +

ENSG: ENSG00000198804

+

HGNC ID: HGNC:7419

+

HGNC symbol: MT-CO1

+

entrez_id: 4512

+ +
+
+ + + +

ENSG: ENSG00000131143

+

HGNC ID: HGNC:2265

+

HGNC symbol: COX4I1

+

entrez_id: 1327

+ +
+
+ + + +

ENSG: ENSG00000127184

+

HGNC ID: HGNC:2292

+

HGNC symbol: COX7C

+

entrez_id: 1350

+ +
+
+ + + +

ENSG: ENSG00000124172

+

HGNC ID: HGNC:838

+

HGNC symbol: ATP5F1E

+

entrez_id: 514

+ +
+
+ + + +

ENSG: ENSG00000165629

+

HGNC ID: HGNC:833

+

HGNC symbol: ATP5F1C

+

entrez_id: 509

+ +
+
+ + + +

ENSG: ENSG00000135390

+

HGNC ID: HGNC:842

+

HGNC symbol: ATP5MC2

+

entrez_id: 517

+ +
+
+ + + +

ENSG: ENSG00000198899

+

HGNC ID: HGNC:7414

+

HGNC symbol: MT-ATP6

+

entrez_id: 4508

+ +
+
+ + + +

ENSG: ENSG00000099624

+

HGNC ID: HGNC:837

+

HGNC symbol: ATP5F1D

+

entrez_id: 513

+ +
+
+ + + +

ENSG: ENSG00000154518

+

HGNC ID: HGNC:843

+

HGNC symbol: ATP5MC3

+

entrez_id: 518

+ +
+
+ + + +

ENSG: ENSG00000169020

+

HGNC ID: HGNC:846

+

HGNC symbol: ATP5ME

+

entrez_id: 521

+ +
+
+ + + +

ENSG: ENSG00000152234

+

HGNC ID: HGNC:823

+

HGNC symbol: ATP5F1A

+

entrez_id: 498

+ +
+
+ + + +

ENSG: ENSG00000228253

+

HGNC ID: HGNC:7415

+

HGNC symbol: MT-ATP8

+

entrez_id: 4509

+ +
+
+ + + +

ENSG: ENSG00000167283

+

HGNC ID: HGNC:14247

+

HGNC symbol: ATP5MG

+

entrez_id: 10632

+ +
+
+ + + +

ENSG: ENSG00000159199

+

HGNC ID: HGNC:841

+

HGNC symbol: ATP5MC1

+

entrez_id: 516

+ +
+
+ + + +

ENSG: ENSG00000241837

+

HGNC ID: HGNC:850

+

HGNC symbol: ATP5PO

+

entrez_id: 539

@@ -16319,13 +16437,23 @@
- - - -

ENSG: ENSG00000169020

-

HGNC ID: HGNC:846

-

HGNC symbol: ATP5ME

-

entrez_id: 521

+ + + +

ENSG: ENSG00000241468

+

HGNC ID: HGNC:848

+

HGNC symbol: ATP5MF

+

entrez_id: 9551

+ +
+
+ + + +

ENSG: ENSG00000116459

+

HGNC ID: HGNC:840

+

HGNC symbol: ATP5PB

+

entrez_id: 515

@@ -16339,136 +16467,6 @@
- - - -

ENSG: ENSG00000165629

-

HGNC ID: HGNC:833

-

HGNC symbol: ATP5F1C

-

entrez_id: 509

- -
-
- - - -

ENSG: ENSG00000099624

-

HGNC ID: HGNC:837

-

HGNC symbol: ATP5F1D

-

entrez_id: 513

- -
-
- - - -

ENSG: ENSG00000135390

-

HGNC ID: HGNC:842

-

HGNC symbol: ATP5MC2

-

entrez_id: 517

- -
-
- - - -

ENSG: ENSG00000241468

-

HGNC ID: HGNC:848

-

HGNC symbol: ATP5MF

-

entrez_id: 9551

- -
-
- - - -

ENSG: ENSG00000152234

-

HGNC ID: HGNC:823

-

HGNC symbol: ATP5F1A

-

entrez_id: 498

- -
-
- - - -

ENSG: ENSG00000116459

-

HGNC ID: HGNC:840

-

HGNC symbol: ATP5PB

-

entrez_id: 515

- -
-
- - - -

ENSG: ENSG00000154518

-

HGNC ID: HGNC:843

-

HGNC symbol: ATP5MC3

-

entrez_id: 518

- -
-
- - - -

ENSG: ENSG00000241837

-

HGNC ID: HGNC:850

-

HGNC symbol: ATP5PO

-

entrez_id: 539

- -
-
- - - -

ENSG: ENSG00000124172

-

HGNC ID: HGNC:838

-

HGNC symbol: ATP5F1E

-

entrez_id: 514

- -
-
- - - -

ENSG: ENSG00000159199

-

HGNC ID: HGNC:841

-

HGNC symbol: ATP5MC1

-

entrez_id: 516

- -
-
- - - -

ENSG: ENSG00000198899

-

HGNC ID: HGNC:7414

-

HGNC symbol: MT-ATP6

-

entrez_id: 4508

- -
-
- - - -

ENSG: ENSG00000228253

-

HGNC ID: HGNC:7415

-

HGNC symbol: MT-ATP8

-

entrez_id: 4509

- -
-
- - - -

ENSG: ENSG00000167283

-

HGNC ID: HGNC:14247

-

HGNC symbol: ATP5MG

-

entrez_id: 10632

- -
-
@@ -16509,13 +16507,13 @@ - - - -

ENSG: ENSG00000117450

-

HGNC ID: HGNC:9352

-

HGNC symbol: PRDX1

-

entrez_id: 5052

+ + + +

ENSG: ENSG00000167815

+

HGNC ID: HGNC:9353

+

HGNC symbol: PRDX2

+

entrez_id: 7001

@@ -16529,6 +16527,26 @@
+ + + +

ENSG: ENSG00000167468

+

HGNC ID: HGNC:4556

+

HGNC symbol: GPX4

+

entrez_id: 2879

+ +
+
+ + + +

ENSG: ENSG00000117450

+

HGNC ID: HGNC:9352

+

HGNC symbol: PRDX1

+

entrez_id: 5052

+ +
+
@@ -16539,26 +16557,6 @@ - - - -

ENSG: ENSG00000167815

-

HGNC ID: HGNC:9353

-

HGNC symbol: PRDX2

-

entrez_id: 7001

- -
-
- - - -

ENSG: ENSG00000167468

-

HGNC ID: HGNC:4556

-

HGNC symbol: GPX4

-

entrez_id: 2879

- -
-
@@ -16629,6 +16627,16 @@ + + + +

ENSG: ENSG00000169100

+

HGNC ID: HGNC:10992

+

HGNC symbol: SLC25A6

+

entrez_id: 293

+ +
+
@@ -16639,16 +16647,6 @@ - - - -

ENSG: ENSG00000169100

-

HGNC ID: HGNC:10992

-

HGNC symbol: SLC25A6

-

entrez_id: 293

- -
-
@@ -16669,13 +16667,23 @@ - - - -

ENSG: ENSG00000164879

-

HGNC ID: HGNC:1374

-

HGNC symbol: CA3

-

entrez_id: 761

+ + + +

ENSG: ENSG00000185015

+

HGNC ID: HGNC:14914

+

HGNC symbol: CA13

+

entrez_id: 377677

+ +
+
+ + + +

ENSG: ENSG00000167434

+

HGNC ID: HGNC:1375

+

HGNC symbol: CA4

+

entrez_id: 762

@@ -16689,33 +16697,23 @@
- - - -

ENSG: ENSG00000118298

-

HGNC ID: HGNC:1372

-

HGNC symbol: CA14

-

entrez_id: 23632

- -
-
- - - -

ENSG: ENSG00000185015

-

HGNC ID: HGNC:14914

-

HGNC symbol: CA13

-

entrez_id: 377677

- -
-
- - - -

ENSG: ENSG00000074410

-

HGNC ID: HGNC:1371

-

HGNC symbol: CA12

-

entrez_id: 771

+ + + +

ENSG: ENSG00000164879

+

HGNC ID: HGNC:1374

+

HGNC symbol: CA3

+

entrez_id: 761

+ +
+
+ + + +

ENSG: ENSG00000104267

+

HGNC ID: HGNC:1373

+

HGNC symbol: CA2

+

entrez_id: 760

@@ -16739,26 +16737,6 @@
- - - -

ENSG: ENSG00000104267

-

HGNC ID: HGNC:1373

-

HGNC symbol: CA2

-

entrez_id: 760

- -
-
- - - -

ENSG: ENSG00000167434

-

HGNC ID: HGNC:1375

-

HGNC symbol: CA4

-

entrez_id: 762

- -
-
@@ -16769,6 +16747,36 @@ + + + +

ENSG: ENSG00000118298

+

HGNC ID: HGNC:1372

+

HGNC symbol: CA14

+

entrez_id: 23632

+ +
+
+ + + +

ENSG: ENSG00000074410

+

HGNC ID: HGNC:1371

+

HGNC symbol: CA12

+

entrez_id: 771

+ +
+
+ + + +

ENSG: ENSG00000169239

+

HGNC ID: HGNC:1378

+

HGNC symbol: CA5B

+

entrez_id: 11238

+ +
+
@@ -16779,16 +16787,6 @@ - - - -

ENSG: ENSG00000169239

-

HGNC ID: HGNC:1378

-

HGNC symbol: CA5B

-

entrez_id: 11238

- -
-
@@ -16799,6 +16797,16 @@ + + + +

ENSG: ENSG00000135821

+

HGNC ID: HGNC:4341

+

HGNC symbol: GLUL

+

entrez_id: 2752

+ +
+
@@ -16809,16 +16817,6 @@ - - - -

ENSG: ENSG00000135821

-

HGNC ID: HGNC:4341

-

HGNC symbol: GLUL

-

entrez_id: 2752

- -
-
@@ -16969,6 +16967,16 @@ + + + +

ENSG: ENSG00000167325

+

HGNC ID: HGNC:10451

+

HGNC symbol: RRM1

+

entrez_id: 6240

+ +
+
@@ -16979,16 +16987,6 @@ - - - -

ENSG: ENSG00000167325

-

HGNC ID: HGNC:10451

-

HGNC symbol: RRM1

-

entrez_id: 6240

- -
-
@@ -17099,6 +17097,16 @@ + + + +

ENSG: ENSG00000103024

+

HGNC ID: HGNC:7851

+

HGNC symbol: NME3

+

entrez_id: 4832

+ +
+
@@ -17109,26 +17117,6 @@ - - - -

ENSG: ENSG00000103024

-

HGNC ID: HGNC:7851

-

HGNC symbol: NME3

-

entrez_id: 4832

- -
-
- - - -

ENSG: ENSG00000243678

-

HGNC ID: HGNC:7850

-

HGNC symbol: NME2

-

entrez_id: 4831

- -
-
@@ -17149,13 +17137,13 @@ - - - -

ENSG: ENSG00000047230

-

HGNC ID: HGNC:2520

-

HGNC symbol: CTPS2

-

entrez_id: 56474

+ + + +

ENSG: ENSG00000243678

+

HGNC ID: HGNC:7850

+

HGNC symbol: NME2

+

entrez_id: 4831

@@ -17169,6 +17157,16 @@
+ + + +

ENSG: ENSG00000047230

+

HGNC ID: HGNC:2520

+

HGNC symbol: CTPS2

+

entrez_id: 56474

+ +
+
@@ -17209,6 +17207,16 @@ + + + +

ENSG: ENSG00000004864

+

HGNC ID: HGNC:10983

+

HGNC symbol: SLC25A13

+

entrez_id: 10165

+ +
+
@@ -17219,16 +17227,6 @@ - - - -

ENSG: ENSG00000004864

-

HGNC ID: HGNC:10983

-

HGNC symbol: SLC25A13

-

entrez_id: 10165

- -
-
@@ -17249,6 +17247,16 @@ + + + +

ENSG: ENSG00000102743

+

HGNC ID: HGNC:10985

+

HGNC symbol: SLC25A15

+

entrez_id: 10166

+ +
+
@@ -17259,16 +17267,6 @@ - - - -

ENSG: ENSG00000102743

-

HGNC ID: HGNC:10985

-

HGNC symbol: SLC25A15

-

entrez_id: 10166

- -
-
@@ -17369,6 +17367,16 @@ + + + +

ENSG: ENSG00000161798

+

HGNC ID: HGNC:638

+

HGNC symbol: AQP5

+

entrez_id: 362

+ +
+
@@ -17379,6 +17387,16 @@ + + + +

ENSG: ENSG00000240583

+

HGNC ID: HGNC:633

+

HGNC symbol: AQP1

+

entrez_id: 358

+ +
+
@@ -17389,26 +17407,6 @@ - - - -

ENSG: ENSG00000240583

-

HGNC ID: HGNC:633

-

HGNC symbol: AQP1

-

entrez_id: 358

- -
-
- - - -

ENSG: ENSG00000161798

-

HGNC ID: HGNC:638

-

HGNC symbol: AQP5

-

entrez_id: 362

- -
-
@@ -17579,6 +17577,16 @@ + + + +

ENSG: ENSG00000110195

+

HGNC ID: HGNC:3791

+

HGNC symbol: FOLR1

+

entrez_id: 2348

+ +
+
@@ -17589,16 +17597,6 @@ - - - -

ENSG: ENSG00000110195

-

HGNC ID: HGNC:3791

-

HGNC symbol: FOLR1

-

entrez_id: 2348

- -
-
@@ -17689,6 +17687,16 @@ + + + +

ENSG: ENSG00000151498

+

HGNC ID: HGNC:87

+

HGNC symbol: ACAD8

+

entrez_id: 27034

+ +
+
@@ -17699,13 +17707,23 @@ - - - -

ENSG: ENSG00000151498

-

HGNC ID: HGNC:87

-

HGNC symbol: ACAD8

-

entrez_id: 27034

+ + + +

ENSG: ENSG00000127884

+

HGNC ID: HGNC:3151

+

HGNC symbol: ECHS1

+

entrez_id: 1892

+ +
+
+ + + +

ENSG: ENSG00000138029

+

HGNC ID: HGNC:4803

+

HGNC symbol: HADHB

+

entrez_id: 3032

@@ -17719,26 +17737,6 @@
- - - -

ENSG: ENSG00000138029

-

HGNC ID: HGNC:4803

-

HGNC symbol: HADHB

-

entrez_id: 3032

- -
-
- - - -

ENSG: ENSG00000127884

-

HGNC ID: HGNC:3151

-

HGNC symbol: ECHS1

-

entrez_id: 1892

- -
-
@@ -17759,13 +17757,23 @@ - - - -

ENSG: ENSG00000072210

-

HGNC ID: HGNC:403

-

HGNC symbol: ALDH3A2

-

entrez_id: 224

+ + + +

ENSG: ENSG00000137124

+

HGNC ID: HGNC:407

+

HGNC symbol: ALDH1B1

+

entrez_id: 219

+ +
+
+ + + +

ENSG: ENSG00000164904

+

HGNC ID: HGNC:877

+

HGNC symbol: ALDH7A1

+

entrez_id: 501

@@ -17779,23 +17787,13 @@
- - - -

ENSG: ENSG00000164904

-

HGNC ID: HGNC:877

-

HGNC symbol: ALDH7A1

-

entrez_id: 501

- -
-
- - - -

ENSG: ENSG00000137124

-

HGNC ID: HGNC:407

-

HGNC symbol: ALDH1B1

-

entrez_id: 219

+ + + +

ENSG: ENSG00000072210

+

HGNC ID: HGNC:403

+

HGNC symbol: ALDH3A2

+

entrez_id: 224

@@ -17889,6 +17887,16 @@
+ + + +

ENSG: ENSG00000167701

+

HGNC ID: HGNC:4552

+

HGNC symbol: GPT

+

entrez_id: 2875

+ +
+
@@ -17899,16 +17907,6 @@ - - - -

ENSG: ENSG00000167701

-

HGNC ID: HGNC:4552

-

HGNC symbol: GPT

-

entrez_id: 2875

- -
-
@@ -17969,6 +17967,16 @@ + + + +

ENSG: ENSG00000144908

+

HGNC ID: HGNC:3978

+

HGNC symbol: ALDH1L1

+

entrez_id: 10840

+ +
+
@@ -17979,16 +17987,6 @@ - - - -

ENSG: ENSG00000144908

-

HGNC ID: HGNC:3978

-

HGNC symbol: ALDH1L1

-

entrez_id: 10840

- -
-
@@ -18049,6 +18047,16 @@ + + + +

ENSG: ENSG00000067064

+

HGNC ID: HGNC:5387

+

HGNC symbol: IDI1

+

entrez_id: 3422

+ +
+
@@ -18059,16 +18067,6 @@ - - - -

ENSG: ENSG00000067064

-

HGNC ID: HGNC:5387

-

HGNC symbol: IDI1

-

entrez_id: 3422

- -
-
@@ -18149,6 +18147,16 @@ + + + +

ENSG: ENSG00000052802

+

HGNC ID: HGNC:10545

+

HGNC symbol: MSMO1

+

entrez_id: 6307

+ +
+
@@ -18159,16 +18167,6 @@ - - - -

ENSG: ENSG00000052802

-

HGNC ID: HGNC:10545

-

HGNC symbol: MSMO1

-

entrez_id: 6307

- -
-
@@ -18269,16 +18267,6 @@ - - - -

ENSG: ENSG00000164398

-

HGNC ID: HGNC:16496

-

HGNC symbol: ACSL6

-

entrez_id: 23305

- -
-
@@ -18309,13 +18297,23 @@ - - - -

ENSG: ENSG00000205560

-

HGNC ID: HGNC:2329

-

HGNC symbol: CPT1B

-

entrez_id: 1375

+ + + +

ENSG: ENSG00000164398

+

HGNC ID: HGNC:16496

+

HGNC symbol: ACSL6

+

entrez_id: 23305

+ +
+
+ + + +

ENSG: ENSG00000169169

+

HGNC ID: HGNC:18540

+

HGNC symbol: CPT1C

+

entrez_id: 126129

@@ -18329,13 +18327,13 @@
- - - -

ENSG: ENSG00000169169

-

HGNC ID: HGNC:18540

-

HGNC symbol: CPT1C

-

entrez_id: 126129

+ + + +

ENSG: ENSG00000205560

+

HGNC ID: HGNC:2329

+

HGNC symbol: CPT1B

+

entrez_id: 1375

@@ -18359,13 +18357,13 @@
- - - -

ENSG: ENSG00000072778

-

HGNC ID: HGNC:92

-

HGNC symbol: ACADVL

-

entrez_id: 37

+ + + +

ENSG: ENSG00000167315

+

HGNC ID: HGNC:83

+

HGNC symbol: ACAA2

+

entrez_id: 10449

@@ -18379,23 +18377,13 @@
- - - -

ENSG: ENSG00000167315

-

HGNC ID: HGNC:83

-

HGNC symbol: ACAA2

-

entrez_id: 10449

- -
-
- - - -

ENSG: ENSG00000109667

-

HGNC ID: HGNC:13446

-

HGNC symbol: SLC2A9

-

entrez_id: 56606

+ + + +

ENSG: ENSG00000072778

+

HGNC ID: HGNC:92

+

HGNC symbol: ACADVL

+

entrez_id: 37

@@ -18409,46 +18397,6 @@
- - - -

ENSG: ENSG00000173262

-

HGNC ID: HGNC:18301

-

HGNC symbol: SLC2A14

-

entrez_id: 144195

- -
-
- - - -

ENSG: ENSG00000115665

-

HGNC ID: HGNC:14025

-

HGNC symbol: SLC5A7

-

entrez_id: 60482

- -
-
- - - -

ENSG: ENSG00000100170

-

HGNC ID: HGNC:11036

-

HGNC symbol: SLC5A1

-

entrez_id: 6523

- -
-
- - - -

ENSG: ENSG00000160326

-

HGNC ID: HGNC:11011

-

HGNC symbol: SLC2A6

-

entrez_id: 11182

- -
-
@@ -18469,16 +18417,6 @@ - - - -

ENSG: ENSG00000117394

-

HGNC ID: HGNC:11005

-

HGNC symbol: SLC2A1

-

entrez_id: 6513

- -
-
@@ -18489,26 +18427,6 @@ - - - -

ENSG: ENSG00000154025

-

HGNC ID: HGNC:23155

-

HGNC symbol: SLC5A10

-

entrez_id: 125206

- -
-
- - - -

ENSG: ENSG00000181856

-

HGNC ID: HGNC:11009

-

HGNC symbol: SLC2A4

-

entrez_id: 6517

- -
-
@@ -18519,76 +18437,6 @@ - - - -

ENSG: ENSG00000142583

-

HGNC ID: HGNC:11010

-

HGNC symbol: SLC2A5

-

entrez_id: 6518

- -
-
- - - -

ENSG: ENSG00000198743

-

HGNC ID: HGNC:11038

-

HGNC symbol: SLC5A3

-

entrez_id: 6526

- -
-
- - - -

ENSG: ENSG00000117834

-

HGNC ID: HGNC:22146

-

HGNC symbol: SLC5A9

-

entrez_id: 200010

- -
-
- - - -

ENSG: ENSG00000138074

-

HGNC ID: HGNC:11041

-

HGNC symbol: SLC5A6

-

entrez_id: 8884

- -
-
- - - -

ENSG: ENSG00000059804

-

HGNC ID: HGNC:11007

-

HGNC symbol: SLC2A3

-

entrez_id: 6515

- -
-
- - - -

ENSG: ENSG00000197496

-

HGNC ID: HGNC:13444

-

HGNC symbol: SLC2A10

-

entrez_id: 81031

- -
-
- - - -

ENSG: ENSG00000133460

-

HGNC ID: HGNC:14239

-

HGNC symbol: SLC2A11

-

entrez_id: 66035

- -
-
@@ -18609,33 +18457,13 @@ - - - -

ENSG: ENSG00000163581

-

HGNC ID: HGNC:11006

-

HGNC symbol: SLC2A2

-

entrez_id: 6514

- -
-
- - - -

ENSG: ENSG00000151229

-

HGNC ID: HGNC:15956

-

HGNC symbol: SLC2A13

-

entrez_id: 114134

- -
-
- - - -

ENSG: ENSG00000140675

-

HGNC ID: HGNC:11037

-

HGNC symbol: SLC5A2

-

entrez_id: 6524

+ + + +

ENSG: ENSG00000100170

+

HGNC ID: HGNC:11036

+

HGNC symbol: SLC5A1

+

entrez_id: 6523

@@ -18649,23 +18477,173 @@
- - - -

ENSG: ENSG00000111371

-

HGNC ID: HGNC:13447

-

HGNC symbol: SLC38A1

-

entrez_id: 81539

- -
-
- - - -

ENSG: ENSG00000168003

-

HGNC ID: HGNC:11026

-

HGNC symbol: SLC3A2

-

entrez_id: 6520

+ + + +

ENSG: ENSG00000115665

+

HGNC ID: HGNC:14025

+

HGNC symbol: SLC5A7

+

entrez_id: 60482

+ +
+
+ + + +

ENSG: ENSG00000140675

+

HGNC ID: HGNC:11037

+

HGNC symbol: SLC5A2

+

entrez_id: 6524

+ +
+
+ + + +

ENSG: ENSG00000198743

+

HGNC ID: HGNC:11038

+

HGNC symbol: SLC5A3

+

entrez_id: 6526

+ +
+
+ + + +

ENSG: ENSG00000117394

+

HGNC ID: HGNC:11005

+

HGNC symbol: SLC2A1

+

entrez_id: 6513

+ +
+
+ + + +

ENSG: ENSG00000109667

+

HGNC ID: HGNC:13446

+

HGNC symbol: SLC2A9

+

entrez_id: 56606

+ +
+
+ + + +

ENSG: ENSG00000142583

+

HGNC ID: HGNC:11010

+

HGNC symbol: SLC2A5

+

entrez_id: 6518

+ +
+
+ + + +

ENSG: ENSG00000117834

+

HGNC ID: HGNC:22146

+

HGNC symbol: SLC5A9

+

entrez_id: 200010

+ +
+
+ + + +

ENSG: ENSG00000173262

+

HGNC ID: HGNC:18301

+

HGNC symbol: SLC2A14

+

entrez_id: 144195

+ +
+
+ + + +

ENSG: ENSG00000154025

+

HGNC ID: HGNC:23155

+

HGNC symbol: SLC5A10

+

entrez_id: 125206

+ +
+
+ + + +

ENSG: ENSG00000197496

+

HGNC ID: HGNC:13444

+

HGNC symbol: SLC2A10

+

entrez_id: 81031

+ +
+
+ + + +

ENSG: ENSG00000163581

+

HGNC ID: HGNC:11006

+

HGNC symbol: SLC2A2

+

entrez_id: 6514

+ +
+
+ + + +

ENSG: ENSG00000138074

+

HGNC ID: HGNC:11041

+

HGNC symbol: SLC5A6

+

entrez_id: 8884

+ +
+
+ + + +

ENSG: ENSG00000059804

+

HGNC ID: HGNC:11007

+

HGNC symbol: SLC2A3

+

entrez_id: 6515

+ +
+
+ + + +

ENSG: ENSG00000160326

+

HGNC ID: HGNC:11011

+

HGNC symbol: SLC2A6

+

entrez_id: 11182

+ +
+
+ + + +

ENSG: ENSG00000151229

+

HGNC ID: HGNC:15956

+

HGNC symbol: SLC2A13

+

entrez_id: 114134

+ +
+
+ + + +

ENSG: ENSG00000181856

+

HGNC ID: HGNC:11009

+

HGNC symbol: SLC2A4

+

entrez_id: 6517

+ +
+
+ + + +

ENSG: ENSG00000133460

+

HGNC ID: HGNC:14239

+

HGNC symbol: SLC2A11

+

entrez_id: 66035

@@ -18679,33 +18657,13 @@
- - - -

ENSG: ENSG00000139209

-

HGNC ID: HGNC:14679

-

HGNC symbol: SLC38A4

-

entrez_id: 55089

- -
-
- - - -

ENSG: ENSG00000103064

-

HGNC ID: HGNC:11064

-

HGNC symbol: SLC7A6

-

entrez_id: 9057

- -
-
- - - -

ENSG: ENSG00000103257

-

HGNC ID: HGNC:11063

-

HGNC symbol: SLC7A5

-

entrez_id: 8140

+ + + +

ENSG: ENSG00000147003

+

HGNC ID: HGNC:29437

+

HGNC symbol: CLTRN

+

entrez_id: 57393

@@ -18719,26 +18677,6 @@
- - - -

ENSG: ENSG00000147003

-

HGNC ID: HGNC:29437

-

HGNC symbol: CLTRN

-

entrez_id: 57393

- -
-
- - - -

ENSG: ENSG00000130234

-

HGNC ID: HGNC:13557

-

HGNC symbol: ACE2

-

entrez_id: 59272

- -
-
@@ -18749,6 +18687,46 @@ + + + +

ENSG: ENSG00000103064

+

HGNC ID: HGNC:11064

+

HGNC symbol: SLC7A6

+

entrez_id: 9057

+ +
+
+ + + +

ENSG: ENSG00000139209

+

HGNC ID: HGNC:14679

+

HGNC symbol: SLC38A4

+

entrez_id: 55089

+ +
+
+ + + +

ENSG: ENSG00000168003

+

HGNC ID: HGNC:11026

+

HGNC symbol: SLC3A2

+

entrez_id: 6520

+ +
+
+ + + +

ENSG: ENSG00000111371

+

HGNC ID: HGNC:13447

+

HGNC symbol: SLC38A1

+

entrez_id: 81539

+ +
+
@@ -18759,13 +18737,23 @@ - - - -

ENSG: ENSG00000174358

-

HGNC ID: HGNC:27960

-

HGNC symbol: SLC6A19

-

entrez_id: 340024

+ + + +

ENSG: ENSG00000103257

+

HGNC ID: HGNC:11063

+

HGNC symbol: SLC7A5

+

entrez_id: 8140

+ +
+
+ + + +

ENSG: ENSG00000130234

+

HGNC ID: HGNC:13557

+

HGNC symbol: ACE2

+

entrez_id: 59272

@@ -18779,13 +18767,13 @@
- - - -

ENSG: ENSG00000268104

-

HGNC ID: HGNC:11047

-

HGNC symbol: SLC6A14

-

entrez_id: 11254

+ + + +

ENSG: ENSG00000174358

+

HGNC ID: HGNC:27960

+

HGNC symbol: SLC6A19

+

entrez_id: 340024

@@ -18799,6 +18787,16 @@
+ + + +

ENSG: ENSG00000268104

+

HGNC ID: HGNC:11047

+

HGNC symbol: SLC6A14

+

entrez_id: 11254

+ +
+
@@ -18809,6 +18807,16 @@ + + + +

ENSG: ENSG00000021488

+

HGNC ID: HGNC:11067

+

HGNC symbol: SLC7A9

+

entrez_id: 11136

+ +
+
@@ -18819,23 +18827,13 @@ - - - -

ENSG: ENSG00000021488

-

HGNC ID: HGNC:11067

-

HGNC symbol: SLC7A9

-

entrez_id: 11136

- -
-
- - - -

ENSG: ENSG00000003989

-

HGNC ID: HGNC:11060

-

HGNC symbol: SLC7A2

-

entrez_id: 6542

+ + + +

ENSG: ENSG00000155465

+

HGNC ID: HGNC:11065

+

HGNC symbol: SLC7A7

+

entrez_id: 9056

@@ -18849,13 +18847,33 @@
- - - -

ENSG: ENSG00000155465

-

HGNC ID: HGNC:11065

-

HGNC symbol: SLC7A7

-

entrez_id: 9056

+ + + +

ENSG: ENSG00000003989

+

HGNC ID: HGNC:11060

+

HGNC symbol: SLC7A2

+

entrez_id: 6542

+ +
+
+ + + +

ENSG: ENSG00000112394

+

HGNC ID: HGNC:17027

+

HGNC symbol: SLC16A10

+

entrez_id: 117247

+ +
+
+ + + +

ENSG: ENSG00000278550

+

HGNC ID: HGNC:23087

+

HGNC symbol: SLC43A2

+

entrez_id: 124935

@@ -18869,26 +18887,6 @@
- - - -

ENSG: ENSG00000278550

-

HGNC ID: HGNC:23087

-

HGNC symbol: SLC43A2

-

entrez_id: 124935

- -
-
- - - -

ENSG: ENSG00000112394

-

HGNC ID: HGNC:17027

-

HGNC symbol: SLC16A10

-

entrez_id: 117247

- -
-
@@ -18909,16 +18907,6 @@ - - - -

ENSG: ENSG00000165970

-

HGNC ID: HGNC:11051

-

HGNC symbol: SLC6A5

-

entrez_id: 9152

- -
-
@@ -18939,13 +18927,13 @@ - - - -

ENSG: ENSG00000163817

-

HGNC ID: HGNC:30927

-

HGNC symbol: SLC6A20

-

entrez_id: 54716

+ + + +

ENSG: ENSG00000165970

+

HGNC ID: HGNC:11051

+

HGNC symbol: SLC6A5

+

entrez_id: 9152

@@ -18969,13 +18957,13 @@
- - - -

ENSG: ENSG00000135218

-

HGNC ID: HGNC:1663

-

HGNC symbol: CD36

-

entrez_id: 948

+ + + +

ENSG: ENSG00000163817

+

HGNC ID: HGNC:30927

+

HGNC symbol: SLC6A20

+

entrez_id: 54716

@@ -18989,6 +18977,16 @@
+ + + +

ENSG: ENSG00000135218

+

HGNC ID: HGNC:1663

+

HGNC symbol: CD36

+

entrez_id: 948

+ +
+
@@ -19009,6 +19007,16 @@ + + + +

ENSG: ENSG00000132874

+

HGNC ID: HGNC:10919

+

HGNC symbol: SLC14A2

+

entrez_id: 8170

+ +
+
@@ -19019,16 +19027,6 @@ - - - -

ENSG: ENSG00000132874

-

HGNC ID: HGNC:10919

-

HGNC symbol: SLC14A2

-

entrez_id: 8170

- -
-
@@ -19049,13 +19047,13 @@ - - - -

ENSG: ENSG00000110436

-

HGNC ID: HGNC:10940

-

HGNC symbol: SLC1A2

-

entrez_id: 6506

+ + + +

ENSG: ENSG00000162383

+

HGNC ID: HGNC:10945

+

HGNC symbol: SLC1A7

+

entrez_id: 6512

@@ -19069,6 +19067,36 @@
+ + + +

ENSG: ENSG00000110436

+

HGNC ID: HGNC:10940

+

HGNC symbol: SLC1A2

+

entrez_id: 6506

+ +
+
+ + + +

ENSG: ENSG00000105143

+

HGNC ID: HGNC:10944

+

HGNC symbol: SLC1A6

+

entrez_id: 6511

+ +
+
+ + + +

ENSG: ENSG00000079215

+

HGNC ID: HGNC:10941

+

HGNC symbol: SLC1A3

+

entrez_id: 6507

+ +
+
@@ -19079,36 +19107,6 @@ - - - -

ENSG: ENSG00000079215

-

HGNC ID: HGNC:10941

-

HGNC symbol: SLC1A3

-

entrez_id: 6507

- -
-
- - - -

ENSG: ENSG00000105143

-

HGNC ID: HGNC:10944

-

HGNC symbol: SLC1A6

-

entrez_id: 6511

- -
-
- - - -

ENSG: ENSG00000162383

-

HGNC ID: HGNC:10945

-

HGNC symbol: SLC1A7

-

entrez_id: 6512

- -
-
@@ -19129,6 +19127,16 @@ + + + +

ENSG: ENSG00000104879

+

HGNC ID: HGNC:1994

+

HGNC symbol: CKM

+

entrez_id: 1158

+ +
+
@@ -19139,13 +19147,13 @@ - - - -

ENSG: ENSG00000104879

-

HGNC ID: HGNC:1994

-

HGNC symbol: CKM

-

entrez_id: 1158

+ + + +

ENSG: ENSG00000131480

+

HGNC ID: HGNC:549

+

HGNC symbol: AOC2

+

entrez_id: 314

@@ -19159,16 +19167,6 @@
- - - -

ENSG: ENSG00000131480

-

HGNC ID: HGNC:549

-

HGNC symbol: AOC2

-

entrez_id: 314

- -
-
@@ -19189,6 +19187,16 @@ + + + +

ENSG: ENSG00000128683

+

HGNC ID: HGNC:4092

+

HGNC symbol: GAD1

+

entrez_id: 2571

+ +
+
@@ -19199,16 +19207,6 @@ - - - -

ENSG: ENSG00000128683

-

HGNC ID: HGNC:4092

-

HGNC symbol: GAD1

-

entrez_id: 2571

- -
-
@@ -19389,6 +19387,16 @@ + + + +

ENSG: ENSG00000188676

+

HGNC ID: HGNC:27269

+

HGNC symbol: IDO2

+

entrez_id: 169355

+ +
+
@@ -19399,16 +19407,6 @@ - - - -

ENSG: ENSG00000188676

-

HGNC ID: HGNC:27269

-

HGNC symbol: IDO2

-

entrez_id: 169355

- -
-
@@ -19479,6 +19477,16 @@ + + + +

ENSG: ENSG00000184470

+

HGNC ID: HGNC:18155

+

HGNC symbol: TXNRD2

+

entrez_id: 10587

+ +
+
@@ -19489,16 +19497,6 @@ - - - -

ENSG: ENSG00000184470

-

HGNC ID: HGNC:18155

-

HGNC symbol: TXNRD2

-

entrez_id: 10587

- -
-
@@ -19519,6 +19517,16 @@ + + + +

ENSG: ENSG00000167900

+

HGNC ID: HGNC:11830

+

HGNC symbol: TK1

+

entrez_id: 7083

+ +
+
@@ -19529,16 +19537,6 @@ - - - -

ENSG: ENSG00000167900

-

HGNC ID: HGNC:11830

-

HGNC symbol: TK1

-

entrez_id: 7083

- -
-
@@ -19549,6 +19547,16 @@ + + + +

ENSG: ENSG00000179520

+

HGNC ID: HGNC:20151

+

HGNC symbol: SLC17A8

+

entrez_id: 246213

+ +
+
@@ -19559,16 +19567,6 @@ - - - -

ENSG: ENSG00000179520

-

HGNC ID: HGNC:20151

-

HGNC symbol: SLC17A8

-

entrez_id: 246213

- -
-
@@ -19599,6 +19597,16 @@ + + + +

ENSG: ENSG00000079739

+

HGNC ID: HGNC:8905

+

HGNC symbol: PGM1

+

entrez_id: 5236

+ +
+
@@ -19609,16 +19617,6 @@ - - - -

ENSG: ENSG00000079739

-

HGNC ID: HGNC:8905

-

HGNC symbol: PGM1

-

entrez_id: 5236

- -
-
diff -r 97eea560a10f -r c6ea189ea7e9 COBRAxy/metabolic_model_setting.py --- a/COBRAxy/metabolic_model_setting.py Mon Sep 29 10:33:26 2025 +0000 +++ b/COBRAxy/metabolic_model_setting.py Mon Sep 29 15:13:21 2025 +0000 @@ -16,6 +16,8 @@ from typing import Optional, Tuple, List import utils.model_utils as modelUtils import logging +from pathlib import Path + ARGS : argparse.Namespace def process_args(args: List[str] = None) -> argparse.Namespace: @@ -147,6 +149,24 @@ df.to_csv(path, sep="\t", index=False) except Exception as e: raise utils.DataErr(path, f"failed writing tabular output: {e}") + +def is_placeholder(gid) -> bool: + """Return True if the gene id looks like a placeholder (e.g., 0/NA/NAN/empty).""" + if gid is None: + return True + s = str(gid).strip().lower() + return s in {"0", "", "na", "nan"} # lowercase for simple matching + +def sample_valid_gene_ids(genes, limit=10): + """Yield up to `limit` valid gene IDs, skipping placeholders (e.g., the first 0 in RECON).""" + out = [] + for g in genes: + gid = getattr(g, "id", getattr(g, "gene_id", g)) + if not is_placeholder(gid): + out.append(str(gid)) + if len(out) >= limit: + break + return out ###############################- ENTRY POINT -################################ @@ -200,11 +220,14 @@ if value is not None: model.reactions.get_by_id(reaction).lower_bound = -float(value) + # Initialize translation_issues dictionary + translation_issues = {} + if (ARGS.name == "Recon" or ARGS.name == "ENGRO2") and ARGS.gene_format != "Default": logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) - model = modelUtils.translate_model_genes( + model, translation_issues = modelUtils.translate_model_genes( model=model, mapping_df= pd.read_csv(ARGS.tool_dir + "/local/mappings/genes_human.csv", dtype={'entrez_id': str}), target_nomenclature=ARGS.gene_format, @@ -212,6 +235,80 @@ logger=logger ) + if ARGS.name == "Custom_model" and ARGS.gene_format != "Default": + logging.basicConfig(level=logging.INFO) + logger = logging.getLogger(__name__) + + tmp_check = [] + for g in model.genes[1:5]: # check first 3 genes only + tmp_check.append(modelUtils.gene_type(g.id, "Custom_model")) + + if len(set(tmp_check)) > 1: + raise utils.DataErr("Custom_model", "The custom model contains genes with mixed or unrecognized nomenclature. Please ensure all genes use the same recognized nomenclature before applying gene_format conversion.") + else: + source_nomenclature = tmp_check[0] + + if source_nomenclature != ARGS.gene_format: + model, translation_issues = modelUtils.translate_model_genes( + model=model, + mapping_df= pd.read_csv(ARGS.tool_dir + "/local/mappings/genes_human.csv", dtype={'entrez_id': str}), + target_nomenclature=ARGS.gene_format, + source_nomenclature=source_nomenclature, + logger=logger + ) + + + + + if ARGS.name == "Custom_model" and ARGS.gene_format != "Default": + logger = logging.getLogger(__name__) + + # Take a small, clean sample of gene IDs (skipping placeholders like 0) + ids_sample = sample_valid_gene_ids(model.genes, limit=10) + if not ids_sample: + raise utils.DataErr( + "Custom_model", + "No valid gene IDs found (many may be placeholders like 0)." + ) + + # Detect source nomenclature on the sample + types = [] + for gid in ids_sample: + try: + t = modelUtils.gene_type(gid, "Custom_model") + except Exception as e: + # Keep it simple: skip problematic IDs + logger.debug(f"gene_type failed for {gid}: {e}") + t = None + if t: + types.append(t) + + if not types: + raise utils.DataErr( + "Custom_model", + "Could not detect a known gene nomenclature from the sample." + ) + + unique_types = set(types) + if len(unique_types) > 1: + raise utils.DataErr( + "Custom_model", + "Mixed or inconsistent gene nomenclatures detected. " + "Please unify them before converting." + ) + + source_nomenclature = types[0] + + # Convert only if needed + if source_nomenclature != ARGS.gene_format: + model, translation_issues = modelUtils.translate_model_genes( + model=model, + mapping_df= pd.read_csv(ARGS.tool_dir + "/local/mappings/genes_human.csv", dtype={'entrez_id': str}), + target_nomenclature=ARGS.gene_format, + source_nomenclature=source_nomenclature, + logger=logger + ) + # generate data rules = modelUtils.generate_rules(model, asParsed = False) reactions = modelUtils.generate_reactions(model, asParsed = False) @@ -225,6 +322,12 @@ df_rules = pd.DataFrame(list(rules.items()), columns = ["ReactionID", "GPR"]) df_reactions = pd.DataFrame(list(reactions.items()), columns = ["ReactionID", "Formula"]) + # Create DataFrame for translation issues + df_translation_issues = pd.DataFrame([ + {"ReactionID": rxn_id, "TranslationIssues": issues} + for rxn_id, issues in translation_issues.items() + ]) + df_bounds = bounds.reset_index().rename(columns = {"index": "ReactionID"}) df_medium = medium.rename(columns = {"reaction": "ReactionID"}) df_medium["InMedium"] = True @@ -235,6 +338,15 @@ if ARGS.name == "ENGRO2": merged = merged.merge(compartments, on = "ReactionID", how = "outer") merged = merged.merge(df_medium, on = "ReactionID", how = "left") + + # Add translation issues column + if not df_translation_issues.empty: + merged = merged.merge(df_translation_issues, on = "ReactionID", how = "left") + merged["TranslationIssues"] = merged["TranslationIssues"].fillna("") + else: + # Add empty TranslationIssues column if no issues found + #merged["TranslationIssues"] = "" + pass merged["InMedium"] = merged["InMedium"].fillna(False) diff -r 97eea560a10f -r c6ea189ea7e9 COBRAxy/metabolic_model_setting.xml --- a/COBRAxy/metabolic_model_setting.xml Mon Sep 29 10:33:26 2025 +0000 +++ b/COBRAxy/metabolic_model_setting.xml Mon Sep 29 15:13:21 2025 +0000 @@ -81,6 +81,10 @@ + + + + diff -r 97eea560a10f -r c6ea189ea7e9 COBRAxy/ras_generator.py --- a/COBRAxy/ras_generator.py Mon Sep 29 10:33:26 2025 +0000 +++ b/COBRAxy/ras_generator.py Mon Sep 29 15:13:21 2025 +0000 @@ -106,97 +106,6 @@ rules.append(value) return (ids, rules) -############################ check_methods #################################### -def gene_type(l :str, name :str) -> str: - """ - Determine the type of gene ID. - - Args: - l (str): The gene identifier to check. - name (str): The name of the dataset, used in error messages. - - Returns: - str: The type of gene ID ('hugo_id', 'ensembl_gene_id', 'symbol', or 'entrez_id'). - - Raises: - sys.exit: If the gene ID type is not supported, the execution is aborted. - """ - if check_hgnc(l): - return 'hugo_id' - elif check_ensembl(l): - return 'ensembl_gene_id' - elif check_symbol(l): - return 'symbol' - elif check_entrez(l): - return 'entrez_id' - else: - sys.exit('Execution aborted:\n' + - 'gene ID type in ' + name + ' not supported. Supported ID'+ - 'types are: HUGO ID, Ensemble ID, HUGO symbol, Entrez ID\n') - -def check_hgnc(l :str) -> bool: - """ - Check if a gene identifier follows the HGNC format. - - Args: - l (str): The gene identifier to check. - - Returns: - bool: True if the gene identifier follows the HGNC format, False otherwise. - """ - if len(l) > 5: - if (l.upper()).startswith('HGNC:'): - return l[5:].isdigit() - else: - return False - else: - return False - -def check_ensembl(l :str) -> bool: - """ - Check if a gene identifier follows the Ensembl format. - - Args: - l (str): The gene identifier to check. - - Returns: - bool: True if the gene identifier follows the Ensembl format, False otherwise. - """ - return l.upper().startswith('ENS') - - -def check_symbol(l :str) -> bool: - """ - Check if a gene identifier follows the symbol format. - - Args: - l (str): The gene identifier to check. - - Returns: - bool: True if the gene identifier follows the symbol format, False otherwise. - """ - if len(l) > 0: - if l[0].isalpha() and l[1:].isalnum(): - return True - else: - return False - else: - return False - -def check_entrez(l :str) -> bool: - """ - Check if a gene identifier follows the Entrez ID format. - - Args: - l (str): The gene identifier to check. - - Returns: - bool: True if the gene identifier follows the Entrez ID format, False otherwise. - """ - if len(l) > 0: - return l.isdigit() - else: - return False ############################ gene ############################################# def data_gene(gene: pd.DataFrame, type_gene: str, name: str, gene_custom: Optional[Dict[str, str]]) -> Dict[str, str]: diff -r 97eea560a10f -r c6ea189ea7e9 COBRAxy/utils/model_utils.py --- a/COBRAxy/utils/model_utils.py Mon Sep 29 10:33:26 2025 +0000 +++ b/COBRAxy/utils/model_utils.py Mon Sep 29 15:13:21 2025 +0000 @@ -18,6 +18,100 @@ import utils.rule_parsing as rulesUtils import utils.reaction_parsing as reactionUtils from cobra import Model as cobraModel, Reaction, Metabolite +import sys + + +############################ check_methods #################################### +def gene_type(l :str, name :str) -> str: + """ + Determine the type of gene ID. + + Args: + l (str): The gene identifier to check. + name (str): The name of the dataset, used in error messages. + + Returns: + str: The type of gene ID ('hugo_id', 'ensembl_gene_id', 'symbol', or 'entrez_id'). + + Raises: + sys.exit: If the gene ID type is not supported, the execution is aborted. + """ + if check_hgnc(l): + return 'hugo_id' + elif check_ensembl(l): + return 'ensembl_gene_id' + elif check_symbol(l): + return 'symbol' + elif check_entrez(l): + return 'entrez_id' + else: + sys.exit('Execution aborted:\n' + + 'gene ID type in ' + name + ' not supported. Supported ID'+ + 'types are: HUGO ID, Ensemble ID, HUGO symbol, Entrez ID\n') + +def check_hgnc(l :str) -> bool: + """ + Check if a gene identifier follows the HGNC format. + + Args: + l (str): The gene identifier to check. + + Returns: + bool: True if the gene identifier follows the HGNC format, False otherwise. + """ + if len(l) > 5: + if (l.upper()).startswith('HGNC:'): + return l[5:].isdigit() + else: + return False + else: + return False + +def check_ensembl(l :str) -> bool: + """ + Check if a gene identifier follows the Ensembl format. + + Args: + l (str): The gene identifier to check. + + Returns: + bool: True if the gene identifier follows the Ensembl format, False otherwise. + """ + return l.upper().startswith('ENS') + + +def check_symbol(l :str) -> bool: + """ + Check if a gene identifier follows the symbol format. + + Args: + l (str): The gene identifier to check. + + Returns: + bool: True if the gene identifier follows the symbol format, False otherwise. + """ + if len(l) > 0: + if l[0].isalpha() and l[1:].isalnum(): + return True + else: + return False + else: + return False + +def check_entrez(l :str) -> bool: + """ + Check if a gene identifier follows the Entrez ID format. + + Args: + l (str): The gene identifier to check. + + Returns: + bool: True if the gene identifier follows the Entrez ID format, False otherwise. + """ + if len(l) > 0: + return l.isdigit() + else: + return False ################################- DATA GENERATION -################################ ReactionId = str @@ -506,110 +600,96 @@ def _simplify_boolean_expression(expr: str) -> str: """ - Simplify a boolean expression by removing duplicates and redundancies. - Handles expressions with 'and' and 'or'. + Simplify a boolean expression by removing duplicates while strictly preserving semantics. + This function handles simple duplicates within parentheses while being conservative about + complex expressions that could change semantics. """ if not expr or not expr.strip(): return expr - # normalize operators + # Normalize operators and whitespace expr = expr.replace(' AND ', ' and ').replace(' OR ', ' or ') + expr = ' '.join(expr.split()) # Normalize whitespace - # recursive helper to process expressions - def process_expression(s: str) -> str: - s = s.strip() - if not s: - return s - - # handle parentheses - while '(' in s: - # find the innermost parentheses - start = -1 - for i, c in enumerate(s): - if c == '(': - start = i - elif c == ')' and start != -1: - # process inner content - inner = s[start+1:i] - processed_inner = process_expression(inner) - s = s[:start] + processed_inner + s[i+1:] - break - else: - break - - # split by 'or' at top level - or_parts = [] - current_part = "" - paren_count = 0 - - tokens = s.split() - i = 0 - while i < len(tokens): - token = tokens[i] - if token == 'or' and paren_count == 0: - if current_part.strip(): - or_parts.append(current_part.strip()) - current_part = "" - else: - if token.count('(') > token.count(')'): - paren_count += token.count('(') - token.count(')') - elif token.count(')') > token.count('('): - paren_count -= token.count(')') - token.count('(') - current_part += token + " " - i += 1 + def simplify_parentheses_content(match_obj): + """Helper function to simplify content within parentheses.""" + content = match_obj.group(1) # Content inside parentheses - if current_part.strip(): - or_parts.append(current_part.strip()) - - # process each OR part - processed_or_parts = [] - for or_part in or_parts: - # split by 'and' within each OR part - and_parts = [] - current_and = "" - paren_count = 0 + # Only simplify if it's a pure OR or pure AND chain + if ' or ' in content and ' and ' not in content: + # Pure OR chain - safe to deduplicate + parts = [p.strip() for p in content.split(' or ') if p.strip()] + unique_parts = [] + seen = set() + for part in parts: + if part not in seen: + unique_parts.append(part) + seen.add(part) - and_tokens = or_part.split() - j = 0 - while j < len(and_tokens): - token = and_tokens[j] - if token == 'and' and paren_count == 0: - if current_and.strip(): - and_parts.append(current_and.strip()) - current_and = "" - else: - if token.count('(') > token.count(')'): - paren_count += token.count('(') - token.count(')') - elif token.count(')') > token.count('('): - paren_count -= token.count(')') - token.count('(') - current_and += token + " " - j += 1 + if len(unique_parts) == 1: + return unique_parts[0] # Remove unnecessary parentheses for single items + else: + return '(' + ' or '.join(unique_parts) + ')' + + elif ' and ' in content and ' or ' not in content: + # Pure AND chain - safe to deduplicate + parts = [p.strip() for p in content.split(' and ') if p.strip()] + unique_parts = [] + seen = set() + for part in parts: + if part not in seen: + unique_parts.append(part) + seen.add(part) - if current_and.strip(): - and_parts.append(current_and.strip()) - - # deduplicate AND parts - unique_and_parts = list(dict.fromkeys(and_parts)) # mantiene l'ordine - - if len(unique_and_parts) == 1: - processed_or_parts.append(unique_and_parts[0]) - elif len(unique_and_parts) > 1: - processed_or_parts.append(" and ".join(unique_and_parts)) + if len(unique_parts) == 1: + return unique_parts[0] # Remove unnecessary parentheses for single items + else: + return '(' + ' and '.join(unique_parts) + ')' + else: + # Mixed operators or single item - return with parentheses as-is + return '(' + content + ')' + + def remove_duplicates_simple(parts_str: str, separator: str) -> str: + """Remove duplicates from a simple chain of operations.""" + parts = [p.strip() for p in parts_str.split(separator) if p.strip()] - # deduplicate OR parts - unique_or_parts = list(dict.fromkeys(processed_or_parts)) + # Remove duplicates while preserving order + unique_parts = [] + seen = set() + for part in parts: + if part not in seen: + unique_parts.append(part) + seen.add(part) - if len(unique_or_parts) == 1: - return unique_or_parts[0] - elif len(unique_or_parts) > 1: - return " or ".join(unique_or_parts) + if len(unique_parts) == 1: + return unique_parts[0] else: - return "" + return f' {separator} '.join(unique_parts) try: - return process_expression(expr) + import re + + # First, simplify content within parentheses + # This handles cases like (A or A) -> A and (B and B) -> B + expr_simplified = re.sub(r'\(([^()]+)\)', simplify_parentheses_content, expr) + + # Check if the resulting expression has mixed operators + has_and = ' and ' in expr_simplified + has_or = ' or ' in expr_simplified + + # Only simplify top-level if it's pure AND or pure OR + if has_and and not has_or and '(' not in expr_simplified: + # Pure AND chain at top level - safe to deduplicate + return remove_duplicates_simple(expr_simplified, 'and') + elif has_or and not has_and and '(' not in expr_simplified: + # Pure OR chain at top level - safe to deduplicate + return remove_duplicates_simple(expr_simplified, 'or') + else: + # Mixed operators or has parentheses - return the simplified version (with parentheses content cleaned) + return expr_simplified + except Exception: - # if simplification fails, return the original expression + # If anything goes wrong, return the original expression return expr # ---------- Main public function ---------- @@ -618,7 +698,7 @@ target_nomenclature: str, source_nomenclature: str = 'hgnc_id', allow_many_to_one: bool = False, - logger: Optional[logging.Logger] = None) -> 'cobra.Model': + logger: Optional[logging.Logger] = None) -> Tuple['cobra.Model', Dict[str, str]]: """ Translate model genes from source_nomenclature to target_nomenclature using a mapping table. mapping_df should contain columns enabling mapping (e.g., ensg, hgnc_id, hgnc_symbol, entrez). @@ -630,6 +710,11 @@ source_nomenclature: Current source key in the model (default 'hgnc_id'). allow_many_to_one: If True, allow many-to-one mappings and handle duplicates in GPRs. logger: Optional logger. + + Returns: + Tuple containing: + - Translated COBRA model + - Dictionary mapping reaction IDs to translation issue descriptions """ if logger is None: logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') @@ -701,6 +786,9 @@ stats = {'translated': 0, 'one_to_one': 0, 'one_to_many': 0, 'not_found': 0, 'simplified_gprs': 0} unmapped = [] multi = [] + + # Dictionary to store translation issues per reaction + reaction_translation_issues = {} original_genes = {g.id for g in model_copy.genes} logger.info(f"Original genes count: {len(original_genes)}") @@ -709,7 +797,10 @@ for rxn in model_copy.reactions: gpr = rxn.gene_reaction_rule if gpr and gpr.strip(): - new_gpr = _translate_gpr(gpr, gene_mapping, stats, unmapped, multi, logger) + new_gpr, rxn_issues = _translate_gpr(gpr, gene_mapping, stats, unmapped, multi, logger, track_issues=True) + if rxn_issues: + reaction_translation_issues[rxn.id] = rxn_issues + if new_gpr != gpr: simplified_gpr = _simplify_boolean_expression(new_gpr) if simplified_gpr != new_gpr: @@ -725,7 +816,7 @@ _log_translation_statistics(stats, unmapped, multi, original_genes, model_copy.genes, logger) logger.info("Translation finished") - return model_copy + return model_copy, reaction_translation_issues # ---------- helper functions ---------- @@ -762,10 +853,11 @@ stats: Dict[str, int], unmapped_genes: List[str], multi_mapping_genes: List[Tuple[str, List[str]]], - logger: logging.Logger) -> str: + logger: logging.Logger, + track_issues: bool = False) -> Union[str, Tuple[str, str]]: """ Translate genes inside a GPR string using gene_mapping. - Returns new GPR string. + Returns new GPR string, and optionally translation issues if track_issues=True. """ # Generic token pattern: letters, digits, :, _, -, ., (captures HGNC:1234, ENSG000..., symbols) token_pattern = r'\b[A-Za-z0-9:_.-]+\b' @@ -775,6 +867,7 @@ tokens = [t for t in tokens if t not in logical] new_gpr = gpr_string + issues = [] for token in sorted(set(tokens), key=lambda x: -len(x)): # longer tokens first to avoid partial replacement norm = _normalize_gene_id(token) @@ -788,6 +881,8 @@ stats['one_to_many'] += 1 multi_mapping_genes.append((token, targets)) replacement = "(" + " or ".join(targets) + ")" + if track_issues: + issues.append(f"{token} -> {' or '.join(targets)}") pattern = r'\b' + re.escape(token) + r'\b' new_gpr = re.sub(pattern, replacement, new_gpr) @@ -797,7 +892,32 @@ unmapped_genes.append(token) logger.debug(f"Token not found in mapping (left as-is): {token}") - return new_gpr + # Check for many-to-one cases (multiple source genes mapping to same target) + if track_issues: + # Build reverse mapping to detect many-to-one cases from original tokens + original_to_target = {} + + for orig_token in tokens: + norm = _normalize_gene_id(orig_token) + if norm in gene_mapping: + targets = gene_mapping[norm] + for target in targets: + if target not in original_to_target: + original_to_target[target] = [] + if orig_token not in original_to_target[target]: + original_to_target[target].append(orig_token) + + # Identify many-to-one mappings in this specific GPR + for target, original_genes in original_to_target.items(): + if len(original_genes) > 1: + issues.append(f"{' or '.join(original_genes)} -> {target}") + + issue_text = "; ".join(issues) if issues else "" + + if track_issues: + return new_gpr, issue_text + else: + return new_gpr def _update_model_genes(model: 'cobra.Model', logger: logging.Logger): @@ -874,4 +994,6 @@ if multi_mapping_genes: logger.info(f"Multi-mapping examples ({len(multi_mapping_genes)}):") for orig, targets in multi_mapping_genes[:10]: - logger.info(f" {orig} -> {', '.join(targets)}") \ No newline at end of file + logger.info(f" {orig} -> {', '.join(targets)}") + + \ No newline at end of file