Mercurial > repos > bimib > cobraxy
changeset 551:d45a37837ffa draft
Uploaded
line wrap: on
line diff
--- a/COBRAxy/docs/tutorials/README.md Mon Nov 03 14:49:49 2025 +0000 +++ b/COBRAxy/docs/tutorials/README.md Thu Dec 11 11:17:33 2025 +0000 @@ -11,19 +11,216 @@ To use a workflow, click the "Import" button, and it will be added to your personal workflow page. -| Tutorial | Description | -|----------|-------------| -|[Flux Enrichment Analysis - separated datasets](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=a64417ff266b740e) | Creation of maps of the fluxes differently expressed between two conditions. One gene expression dataset different for each condition. | -| [Flux Enrichment Analysis (sampling mean) - separated datasets](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=16e792953f5b45db) | Creation of maps of the fluxes differently expressed between two conditions. One gene expression dataset different for each condition. | -| [Flux clustering (sampling mean) + Flux Enrichment Analys](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=c851ab275e52f8af) | Creation of maps of the fluxes, using one dataset differently expressed for each condition and its sample group specification| -| [Flux Enrichment Analysis (pFBA) - separated datasets](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=bf0806da5b28c6d9) | Creation of maps of the fluxes differently expressed between two conditions. One gene expression dataset different for each condition. | -| [Flux clustering (pFBA) + Flux Enrichment Analysis](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=be0a27b9edd0db03) | Creation of maps of the fluxes, using one dataset differently expressed for each condition and its sample group specification | -| [RAS clustering + Reaction Enrichment Analysis](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=81991b32733a4fc4) | Creation of RAS maps, one single expression gene dataset and its sample group specification | -| [Reaction Enrichment Analysis - unified datasets](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=0d16186aaff7cbfd) |Creation of RAS maps starting from an expression dataset and its corresponding classes. One gene expression dataset as input and its classes to compare. | -| [Reaction Enrichment Analysis - separated datasets](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=290670ee50ab85f0) | Creation of RAS maps using the tool MaREA. Confrontation of two datasets that must be different from one another. | +| Tutorial | Description | 🌐 Galaxy Workflow | 📘 Documentation | +|-----------|-------------|--------------------|------------------| +| **Flux Enrichment Analysis (Sampling Mean) — Separated Datasets** | Generate flux maps highlighting differences between two conditions. | [🔗 Open](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=16e792953f5b45db) | [📄 See section](#flux-enrichment-analysis-sampling-mean--separated-datasets) | +| **Flux Clustering (Sampling Mean) + Flux Enrichment Analysis** | Cluster fluxes and identify condition-specific differences. | [🔗 Open](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=c851ab275e52f8af) | [📄 See section](#flux-clustering-sampling-mean--flux-enrichment-analysis) | +| **Flux Enrichment Analysis (pFBA) — Separated Datasets** | Compare fluxes between two conditions using pFBA simulations. | [🔗 Open](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=bf0806da5b28c6d9) | [📄 See section](#flux-enrichment-analysis-pfba--separated-datasets) | +| **Flux Clustering (pFBA) + Flux Enrichment Analysis** | Cluster pFBA-derived fluxes and analyze enriched pathways. | [🔗 Open](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=be0a27b9edd0db03) | [📄 See section](#flux-clustering-pfba--flux-enrichment-analysis) | +| **RAS Clustering + Reaction Enrichment Analysis** | Cluster RAS profiles and identify significantly enriched reactions. | [🔗 Open](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=81991b32733a4fc4) | [📄 See section](#ras-clustering--reaction-enrichment-analysis) | +| **Reaction Enrichment Analysis — Unified Datasets** | Compare RAS profiles between classes within one dataset. | [🔗 Open](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=0d16186aaff7cbfd) | [📄 See section](#reaction-enrichment-analysis--unified-datasets) | +| **Reaction Enrichment Analysis — Separated Datasets** | Analyze RAS differences between two distinct datasets. | [🔗 Open](http://marea4galaxy.cloud.ba.infn.it/galaxy/published/workflow?id=290670ee50ab85f0) | [📄 See section](#reaction-enrichment-analysis--separated-datasets) | + A more detailed description of the tools is available on the corresponding GALAXY page. +### Flux Enrichment Analysis (Sampling Mean) — Separated Datasets + +#### Goal +Perform a **statistical analysis of fluxes** from two different datasets derived from flux simulations using the **sampling mean** method. + +#### Scenario +You have **one gene expression dataset per condition** (e.g., *Cancer vs Normal*). + +#### 1. Import Metabolic Model +- Load the metabolic model. +- Define the **medium** and the **gene nomenclature format**. + +#### 2. Expression to RAS +- Transform a **gene expression file** into a **RAS dataset**. +- This step must be applied **individually for each dataset**. + +#### 3. RAS to Bounds +- Use the **two RAS datasets** (one per condition) as input. +- Generate the corresponding **flux bounds**. + +#### 4. Flux Simulation +- Use the **output from the RAS to Bounds** step as input. +- Select **sampling mean (mean)** as the simulation method. + +#### 5. Metabolic Flux Enrichment Analysis +- Create a **map of significant differences** between fluxes from the two datasets. +- Use the **flux simulation output** together with the **RASToBounds results** to identify enriched pathways or reactions. + + +### Flux Clustering (Sampling Mean) + Flux Enrichment Analysis + +#### Goal +Creation of **flux maps** from two different datasets and **clustering** based on flux simulations using the **sampling mean** method. + +#### Scenario +You have **one gene expression dataset**. + +#### 1. Import Metabolic Model +- Load the metabolic model. +- Define the **medium** and the **gene nomenclature format**. + +#### 2. Expression to RAS +- Transform a **gene expression file** into a **RAS dataset**. +- This step must be applied **for each dataset**. + +#### 3. RAS to Bounds +- Use **two different RAS datasets** as input. +- Generate the corresponding **flux bounds**. + +#### 4. Flux Simulation +- Use the **output from the RAS to Bounds** step as input. +- Select **sampling mean (mean)** as the simulation method. + +#### 5. Cluster Analysis +- Perform **clustering** on the **flux dataset** obtained from the simulation. +- Identify patterns or groups within the flux profiles. + +#### 6. Metabolic Flux Enrichment Analysis +- Create **flux maps** showing **significant differences** between clusters. +- Use: + - The **clusters** as the *sample group specification*. + - The **mean of each sample** from flux sampling as the *input flux data*. + + +### Flux Enrichment Analysis (pFBA) — Separated Datasets + +#### Goal +Perform a **statistical analysis of fluxes** from two different datasets obtained from flux simulations using **pFBA** (parsimonious Flux Balance Analysis). + +#### Scenario +You have **one gene expression dataset per condition** (e.g., *Cancer vs Normal*). + +#### 1. Import Metabolic Model +- Load the metabolic model. +- Define the **medium** and the **gene nomenclature format**. + +#### 2. Expression to RAS +- Transform a **gene expression file** into a **RAS dataset**. +- This step must be applied **individually for each dataset**. + +#### 3. RAS to Bounds +- Use the **two RAS datasets** (one per condition) as input. +- Generate the corresponding **flux bounds**. + +#### 4. Flux Simulation +- Use the **output from the RAS to Bounds** step as input. +- Select **pFBA** as the simulation method. + +#### 5. Metabolic Flux Enrichment Analysis +- Perform **analysis and visualization** of **significant differences** between fluxes of the two groups (e.g., *Normal* vs *Cancer*). +- Use the **flux simulation output** together with the **RASToBounds results** to identify enriched or altered metabolic pathways. + + +### Flux Clustering (pFBA) + Flux Enrichment Analysis + +#### Goal +Perform a **statistical analysis of fluxes** from two datasets using **clusters derived from flux simulations** with **pFBA** (parsimonious Flux Balance Analysis). + +#### Scenario +You have **two gene expression datasets**. + +#### 1. Import Metabolic Model +- Load the metabolic model. +- Define the **medium** and the **gene nomenclature format**. + +#### 2. Expression to RAS +- Transform each **gene expression file** into a **RAS dataset**. +- This step must be applied **for each dataset**. + +#### 3. RAS to Bounds +- Use the **two RAS datasets** as input. +- Generate the corresponding **flux bounds**. + +#### 4. Flux Simulation +- Use the **output from the RAS to Bounds** step as input. +- Select **pFBA** as the simulation method. + +#### 5. Cluster Analysis +- Perform **clustering** on the **flux dataset** obtained from the pFBA simulation. +- Identify clusters or groups within the flux profiles. + +#### 6. Metabolic Flux Enrichment Analysis +- Perform **analysis and visualization** of **significant differences** between fluxes of different clusters. +- Use: + - The **clusters** as the *sample group specification*. + - The **output from the pFBA flux simulation** as the *input flux data*. +- Optionally, specify **p-value** and **fold change** thresholds to refine the analysis. + + +### RAS Clustering + Reaction Enrichment Analysis + +#### Goal +Perform **RAS statistical analysis** using the **MaREA** tool. +Compare **RAS clusters** obtained from a **single gene expression dataset**. + +#### Scenario +You have **one gene expression dataset**. + +#### 1. Import Metabolic Model +- Load the metabolic model. +- Define the **medium** and the **gene nomenclature format**. + +#### 2. Expression to RAS +- Transform the **gene expression file** into a **RAS dataset**. + +#### 3. Cluster Analysis +- Perform **clustering** on the **RAS dataset**. +- Identify distinct clusters or groups within the data. + +#### 4. Metabolic Reaction Enrichment Analysis (MaREA) +- Perform **analysis and visualization** of **significant differences** between RAS values of different clusters. +- Use **MaREA** to detect enriched reactions and metabolic changes. +- Optionally, specify **p-value** and **fold change** thresholds to refine the analysis. + +### Reaction Enrichment Analysis — Unified Datasets + +#### Goal +Perform **RAS statistical analysis** using the **MaREA** tool. +Compare **groups within the same gene expression dataset**. + +#### Scenario +You have **one gene expression dataset** along with the **corresponding class labels** (e.g., *Normal* vs *Cancer*). + +#### 1. Import Metabolic Model +- Load the metabolic model. +- Define the **medium** and the **gene nomenclature format**. + +#### 2. Expression to RAS +- Transform the **gene expression file** into a **RAS dataset**. + +#### 3. Metabolic Reaction Enrichment Analysis (MaREA) +- Perform **analysis and visualization** of **significant differences** between RAS values of different groups (e.g., *Normal* vs *Cancer*). +- The **classes** are provided as input and used for **sample group specification** in the tool. +- Optionally, specify **p-value** and **fold change** thresholds to refine the analysis. + +### Reaction Enrichment Analysis — Separated Datasets + +#### Goal +Perform **RAS statistical analysis** using the **MaREA** tool with **different gene expression datasets**. + +#### Scenario +You have **one gene expression dataset per condition** (e.g., *Cancer* vs *Normal*). + +#### 1. Import Metabolic Model +- Load the metabolic model. +- Define the **medium** and the **gene nomenclature format**. + +#### 2. Expression to RAS +- Transform each **gene expression file** into a **RAS dataset**. +- This step must be applied **individually for each dataset**. + +#### 3. Metabolic Reaction Enrichment Analysis (MaREA) +- Perform **analysis and visualization** of **significant differences** between RAS values from two different datasets. +- In this scenario, the **two RAS datasets** are provided as **separate inputs**. +- Optionally, specify **p-value** and **fold change** thresholds to refine the analysis. + + ## Tutorial Data Download example datasets used in tutorials:
--- a/COBRAxy/src/local/svg metabolic maps/ENGRO2_map.svg Mon Nov 03 14:49:49 2025 +0000 +++ b/COBRAxy/src/local/svg metabolic maps/ENGRO2_map.svg Thu Dec 11 11:17:33 2025 +0000 @@ -137,15 +137,15 @@ inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" - inkscape:zoom="2.48" - inkscape:cx="431.85483" - inkscape:cy="2394.9596" + inkscape:zoom="3.5072497" + inkscape:cx="1878.2524" + inkscape:cy="1753.9384" inkscape:window-width="2560" inkscape:window-height="1494" inkscape:window-x="-11" inkscape:window-y="-11" inkscape:window-maximized="1" - inkscape:current-layer="Legend body" + inkscape:current-layer="Group 30" showgrid="true"><inkscape:grid id="grid1" units="px" @@ -647,10 +647,11 @@ stroke-width="2.25149" id="R_glu_L_t" inkscape:label="R_glu_L_t" /><path - id="B_glu_L_t" + id="F_glu_L_t" d="m 2544.87,550.696 c -9.67,-3.081 -9.67,-3.081 -9.67,-3.081 l 9.79,-2.671 -2.5,2.825 z" stroke="#000000" - stroke-width="2.66667" /></g><g + stroke-width="2.66667" + inkscape:label="F_glu_L_t" /></g><g id="g26-9" inkscape:label="Glu" transform="matrix(0.99609327,0,0,0.99818223,-16.687307,153.17443)"><text @@ -10497,8 +10498,8 @@ x="-249.53345" y="1576.2749" sodipodi:role="line">sulfite</tspan></text><path - d="m 258.55422,1573.5699 -6.91577,-2.2201 6.88681,-2.3292 -1.71088,2.2882 z m 17.27281,80.2948 -3.09267,9.689 -2.68132,-9.8102 2.83554,2.498 z m -16.8355,-142.1606 -6.91577,-2.2201 6.88681,-2.3292 -1.71088,2.2882 z" - id="F_3SPYRSPm_mito1" + d="m 264.85154,1571.856 -6.91577,-2.2201 6.88681,-2.3292 -1.71088,2.2882 z m 17.27281,80.2948 -3.09267,9.689 -2.68132,-9.8102 2.83554,2.498 z m -16.8355,-142.1606 -6.91577,-2.2201 6.88681,-2.3292 -1.71088,2.2882 z" + id="F_3SPYRSPm" style="fill:none;stroke:#000000;stroke-width:2.67432;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" inkscape:label="3SPYRSTm forward" sodipodi:nodetypes="ccccccccccccccc" /><path @@ -10529,7 +10530,7 @@ y="1428.3075" id="tspan4189-3-6-0-8-9">3sPyr</tspan></text></g><path d="m 834.65818,1120.0764 c -2.22486,6.9013 -2.22486,6.9013 -2.22486,6.9013 l -2.33398,-6.8724 2.293,1.7073 z m 17.38719,-17.1355 c 9.70922,3.0862 9.70922,3.0862 9.70922,3.0862 l -9.83078,2.6757 2.50334,-2.8296 z" - id="F_3SALATAim_mito1" + id="F_3SALATAim" style="fill:none;stroke:#000000;stroke-width:2.67432;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" inkscape:connector-curvature="0" inkscape:label="3SALATAm f" /><path @@ -10983,7 +10984,7 @@ d="m 1664.54,1795.28 c -8.48,2.9 -8.48,2.9 -8.48,2.9 l 8.71,2.12 -2.26,-2.41 z m 11.52,-11.82 c -1.79,-8.16 -1.79,-8.16 -1.79,-8.16 l -1.97,8.08 1.9,-1.99 z" stroke="#000000" stroke-width="2.23952" /><path - id="F_carnitineAcylTransferaseII-0" + id="B_carnitineAcylTransferaseI" d="m 1964.3044,1732.0142 2.9061,-8.4623 2.1245,8.6918 -2.4151,-2.2553 z m -13.8526,13.4995 -8.1771,-1.7863 8.097,-1.9659 -1.9942,1.896 z" stroke="#000000" stroke-width="2.23952"
--- a/COBRAxy/src/local/svg metabolic maps/ENGRO2_no_legend_map.svg Mon Nov 03 14:49:49 2025 +0000 +++ b/COBRAxy/src/local/svg metabolic maps/ENGRO2_no_legend_map.svg Thu Dec 11 11:17:33 2025 +0000 @@ -1,62 +1,29 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg width="2632" - height="2550" - viewBox="0 0 2632 2550" + height="2350" + viewBox="0 0 2632 2350" fill="none" version="1.1" id="svg1344" - sodipodi:docname="ENGRO2_map.svg" + sodipodi:docname="ENGRO2_no_legend_map.svg" inkscape:version="1.4 (86a8ad7, 2024-10-11)" xml:space="preserve" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><defs - id="defs1344"><pattern - inkscape:collect="always" - xlink:href="#invert grid" - preserveAspectRatio="xMidYMid" - id="pattern17" - patternTransform="matrix(2,0,0,2,-20.576263,-22.634197)" - x="5" - y="2" /><pattern - patternUnits="userSpaceOnUse" - width="12" - height="12" - preserveAspectRatio="xMidYMid" - id="invert grid" - x="0" - y="0" - style="fill:#9d9d9d" - inkscape:label="Griglia invertita" - inkscape:collect="always" - inkscape:isstock="true"><rect - style="stroke:none;paint-order:markers fill stroke" - id="rect2-0" - width="10" - height="10" - x="0" - y="0" /></pattern><linearGradient - id="linearGradient10" - inkscape:collect="always"><stop - style="stop-color:#000000;stop-opacity:1;" - offset="0" - id="stop11" /><stop - style="stop-color:#000000;stop-opacity:0;" - offset="1" - id="stop12" /></linearGradient><linearGradient + id="defs1344"><linearGradient id="swatch10" inkscape:swatch="solid"><stop style="stop-color:#8e9999;stop-opacity:0.34076436;" offset="0" id="stop10" /></linearGradient><inkscape:perspective sodipodi:type="inkscape:persp3d" - inkscape:vp_x="0 : 1344 : 1" + inkscape:vp_x="0 : 1144 : 1" inkscape:vp_y="0 : 1000 : 0" - inkscape:vp_z="2632 : 1344 : 1" - inkscape:persp3d-origin="1316 : 942 : 1" + inkscape:vp_z="2632 : 1144 : 1" + inkscape:persp3d-origin="1316 : 742 : 1" id="perspective1" /><linearGradient id="swatch2" inkscape:swatch="solid"><stop @@ -118,17 +85,7 @@ height="2192" id="rect285-3" /><path d="m 81,67 c 0,-6.6274 5.3726,-12 12,-12 h 2478 c 6.63,0 12,5.3726 12,12 v 2156 c 0,6.63 -5.37,12 -12,12 H 93 c -6.6275,0 -12,-5.37 -12,-12 z" - id="path287-0" /></mask><radialGradient - inkscape:collect="always" - xlink:href="#linearGradient10" - id="radialGradient12" - cx="131.78622" - cy="2447.1663" - fx="131.78622" - fy="2447.1663" - r="22.64052" - gradientTransform="matrix(1,0,0,0.42125801,-2.4311019,1407.7565)" - gradientUnits="userSpaceOnUse" /></defs><sodipodi:namedview + id="path287-0" /></mask></defs><sodipodi:namedview id="namedview1344" pagecolor="#ffffff" bordercolor="#000000" @@ -137,15 +94,15 @@ inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" - inkscape:zoom="2.48" - inkscape:cx="431.85483" - inkscape:cy="2394.9596" + inkscape:zoom="0.31000001" + inkscape:cx="1354.8387" + inkscape:cy="1730.6451" inkscape:window-width="2560" inkscape:window-height="1494" inkscape:window-x="-11" inkscape:window-y="-11" inkscape:window-maximized="1" - inkscape:current-layer="Legend body" + inkscape:current-layer="ENGRO2_2" showgrid="true"><inkscape:grid id="grid1" units="px" @@ -163,196 +120,6 @@ id="ENGRO2_2" transform="translate(-8.072989,-1.5474262)" style="display:inline"><g - id="Legend" - inkscape:label="Legend" - transform="translate(-44.507011,31.2884)"><text - id="text39" - fill="#000000" - xml:space="preserve" - style="white-space:pre" - font-family="Arial" - font-size="32px" - font-weight="bold" - letter-spacing="0em"><tspan - x="98.234398" - y="2289.5901" - id="tspan1">Legend:</tspan></text><g - id="Legend body"><text - id="text35" - fill="#000000" - xml:space="preserve" - style="white-space:pre" - font-family="Arial" - font-size="24px" - font-weight="bold" - letter-spacing="0em" - y="-2.8258626" - x="-61.58672"><tspan - x="158.65929" - y="2347.4941" - id="tspan2">Up-regulated in dataset1</tspan></text><text - id="text35-8" - fill="#000000" - xml:space="preserve" - style="white-space:pre;display:inline" - font-family="Arial" - font-size="24px" - font-weight="bold" - letter-spacing="0em" - x="-59.875988" - y="42.726181"><tspan - x="160.37003" - y="2393.0464" - id="tspan2-8">Down-regulated in dataset1</tspan></text><text - id="text_first_condition" - fill="#000000" - xml:space="preserve" - style="white-space:pre;display:inline" - font-family="Arial" - font-size="24px" - font-weight="bold" - letter-spacing="0em" - x="432.39621" - y="1.334836"><tspan - x="652.64221" - y="2351.655" - id="tspan2-8-4">Flux-inversion: same direction of the arrow in dataset1, opposite direction in dataset2.</tspan></text><text - id="text35-8-2-7" - fill="#000000" - xml:space="preserve" - style="white-space:pre;display:inline" - font-family="Arial" - font-size="24px" - font-weight="bold" - letter-spacing="0em" - x="432.39624" - y="95.966736"><tspan - x="652.64221" - y="2446.2871" - id="tspan2-8-4-1">Fold change under threshold</tspan></text><text - id="text35-8-2-7-2" - fill="#000000" - xml:space="preserve" - style="white-space:pre;display:inline" - font-family="Arial" - font-size="24px" - font-weight="bold" - letter-spacing="0em" - x="-59.179775" - y="152.82613"><tspan - x="161.06625" - y="2503.1462" - id="tspan2-8-4-1-3">Not classified</tspan></text><text - id="text35-8-2-7-7" - fill="#000000" - xml:space="preserve" - style="white-space:pre;display:inline" - font-family="Arial" - font-size="24px" - font-weight="bold" - letter-spacing="0em" - x="-55.995022" - y="96.259903"><tspan - x="164.25095" - y="2446.5801" - id="tspan2-8-4-1-6">Not significant</tspan></text><text - id="text_second_condition" - fill="#000000" - xml:space="preserve" - style="white-space:pre;display:inline" - font-family="Arial" - font-size="24px" - font-weight="bold" - letter-spacing="0em" - x="432.39621" - y="43.46542"><tspan - x="652.64221" - y="2393.7856" - id="tspan2-8-4-5">Flux-inversion: same direction of the arrow in dataset2, opposite direction in dataset1.</tspan></text><path - id="path6613-8-6" - d="m 107.71254,2339.5964 h 45" - stroke="#bebebe" - stroke-width="19.016" - sodipodi:nodetypes="cc" - style="fill:#e9ae69;fill-opacity:0;stroke:#e4a675;stroke-opacity:1" - inkscape:highlight-color="#aa1baa" /><path - id="path6613-8-6-1" - d="m 589.13564,2438.215 h 41.28932" - stroke="#bebebe" - stroke-width="18.2151" - style="display:inline" - sodipodi:nodetypes="cc" /><path - id="path6613-8-6-1-14" - d="m 106.71461,2494.5583 h 45.85125" - stroke="#bebebe" - stroke-width="19.195" - style="display:inline;fill:#1a1a1a;stroke:#1a1a1a" - sodipodi:nodetypes="cc" /><path - id="path6613-8-6-0" - d="m 107.42742,2384.9523 h 45" - stroke="#bebebe" - stroke-width="19.0161" - style="display:inline;fill:#6496eb;fill-opacity:1;stroke:#8aa3cc;stroke-opacity:1" - sodipodi:nodetypes="cc" /><path - id="path6613-8-6-0-1" - d="m 106.71461,2438.6449 h 45.28104" - stroke="#bebebe" - stroke-width="19.0753" - style="display:inline;fill:url(#radialGradient12);fill-opacity:1;stroke:url(#pattern17);stroke-width:19.075;stroke-dasharray:none;stroke-dashoffset:95.375;stroke-opacity:1" - sodipodi:nodetypes="cc" /><path - id="path6613-8-6-0-9" - d="m 587.71002,2340.7572 h 45" - stroke="#bebebe" - stroke-width="19.016" - style="display:inline;fill:#ff0000;stroke:#ff0000" - sodipodi:nodetypes="cc" /><path - id="path6613-8-6-0-9-4" - d="m 587.56746,2386.2799 h 45" - stroke="#bebebe" - stroke-width="19.016" - style="display:inline;mix-blend-mode:normal;fill:#0000ff;fill-opacity:1;stroke:#0000ff" - sodipodi:nodetypes="cc" /><text - xml:space="preserve" - style="font-size:18.6667px;font-family:Sans;-inkscape-font-specification:'Sans, Normal';font-variant-caps:small-caps;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#f3f1f2" - x="376.61578" - y="2295.0874" - id="text3"><tspan - sodipodi:role="line" - id="tspan3" /></text><text - id="text35-8-2-7-2-8" - fill="#000000" - xml:space="preserve" - style="white-space:pre;display:inline" - font-family="Arial" - font-size="24px" - font-weight="bold" - letter-spacing="0em" - x="433.65015" - y="150.11345"><tspan - x="653.89612" - y="2500.4338" - id="tspan2-8-4-1-3-5">Tickness is proportional to z-score</tspan></text><g - style="clip-rule:evenodd;fill:none;fill-rule:evenodd;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5" - id="g42" - transform="matrix(0.86839373,0,0,0.60462766,579.67813,2475.394)"><g - id="blend" - style="isolation:isolate;mix-blend-mode:normal"><g - id="g-root-ic_imme_me7dfl1865p1f-fill" - data-item-order="1000000000" - transform="translate(3,3)" /><g - id="g-root-ic_imme_me7dfl1865p1f-stroke" - data-item-order="1000000000" - transform="translate(3,3)"><g - id="ic_imme_me7dfl1865p1f-stroke" - fill="none" - stroke-linecap="round" - stroke-linejoin="round" - stroke-miterlimit="4" - stroke="#484848" - stroke-width="2"><g - id="g1"><path - d="M 17.55932,43.527 50.4412,24.473179 M 10,10 M 49.036999,29.203239 50.4426,24.46114 45.700401,23.055641 M 10,10 m 8.645199,28.713799 -1.087658,4.824802 4.82494,1.087799 M 11.303528,54.176601 V 13.82324 C 14.74238,15.593121 22.44544,18.07098 34,18.07098 c 11.5546,0 19.257599,-2.477859 22.6964,-4.24774 V 54.176601 C 53.257599,52.406799 45.5546,49.929001 34,49.929001 c -11.55456,0 -19.25762,2.477798 -22.696472,4.2476 z" - id="path1" /></g></g></g></g></g></g></g><g id="Palm" inkscape:label="Palm" transform="translate(0.1097935,-48.829673)"><text @@ -647,10 +414,11 @@ stroke-width="2.25149" id="R_glu_L_t" inkscape:label="R_glu_L_t" /><path - id="B_glu_L_t" + id="F_glu_L_t" d="m 2544.87,550.696 c -9.67,-3.081 -9.67,-3.081 -9.67,-3.081 l 9.79,-2.671 -2.5,2.825 z" stroke="#000000" - stroke-width="2.66667" /></g><g + stroke-width="2.66667" + inkscape:label="F_glu_L_t" /></g><g id="g26-9" inkscape:label="Glu" transform="matrix(0.99609327,0,0,0.99818223,-16.687307,153.17443)"><text @@ -6102,7 +5870,7 @@ y="1937.71" id="tspan2991">5,10mTHF</tspan></text><g id="text7967-0-3-65-1-2-4-9-6-3-3-1-0-5-5-1"><text - transform="rotate(0.0309296,-3633961.1,2079729.9)" + transform="rotate(0.0309296,-3633961.1,2079720)" fill="#000000" xml:space="preserve" style="white-space:pre" @@ -6116,7 +5884,7 @@ x="13.2779" y="11.1602" id="tspan2996">O</tspan></text><text - transform="rotate(0.0309296,-3633961.1,2079729.9)" + transform="rotate(0.0309296,-3633961.1,2079720)" fill="#000000" xml:space="preserve" style="white-space:pre" @@ -6186,7 +5954,7 @@ y="11.1602" id="tspan3019">⁺</tspan></text></g><g id="text7967-0-3-65-1-2-4-9-6-3-3-1-0-5-5-1-8"><text - transform="rotate(0.0309296,-3633941.1,2153828.2)" + transform="rotate(0.0309296,-3633941.1,2153818.3)" fill="#000000" xml:space="preserve" style="white-space:pre" @@ -6197,7 +5965,7 @@ x="0.0617189" y="11.1602" id="tspan3024">H</tspan></text><text - transform="rotate(0.0309296,-3633941.1,2153828.2)" + transform="rotate(0.0309296,-3633941.1,2153818.3)" fill="#000000" xml:space="preserve" style="white-space:pre" @@ -10497,8 +10265,8 @@ x="-249.53345" y="1576.2749" sodipodi:role="line">sulfite</tspan></text><path - d="m 258.55422,1573.5699 -6.91577,-2.2201 6.88681,-2.3292 -1.71088,2.2882 z m 17.27281,80.2948 -3.09267,9.689 -2.68132,-9.8102 2.83554,2.498 z m -16.8355,-142.1606 -6.91577,-2.2201 6.88681,-2.3292 -1.71088,2.2882 z" - id="F_3SPYRSPm_mito1" + d="m 264.85154,1571.856 -6.91577,-2.2201 6.88681,-2.3292 -1.71088,2.2882 z m 17.27281,80.2948 -3.09267,9.689 -2.68132,-9.8102 2.83554,2.498 z m -16.8355,-142.1606 -6.91577,-2.2201 6.88681,-2.3292 -1.71088,2.2882 z" + id="F_3SPYRSPm" style="fill:none;stroke:#000000;stroke-width:2.67432;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" inkscape:label="3SPYRSTm forward" sodipodi:nodetypes="ccccccccccccccc" /><path @@ -10529,7 +10297,7 @@ y="1428.3075" id="tspan4189-3-6-0-8-9">3sPyr</tspan></text></g><path d="m 834.65818,1120.0764 c -2.22486,6.9013 -2.22486,6.9013 -2.22486,6.9013 l -2.33398,-6.8724 2.293,1.7073 z m 17.38719,-17.1355 c 9.70922,3.0862 9.70922,3.0862 9.70922,3.0862 l -9.83078,2.6757 2.50334,-2.8296 z" - id="F_3SALATAim_mito1" + id="F_3SALATAim" style="fill:none;stroke:#000000;stroke-width:2.67432;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" inkscape:connector-curvature="0" inkscape:label="3SALATAm f" /><path @@ -10983,7 +10751,7 @@ d="m 1664.54,1795.28 c -8.48,2.9 -8.48,2.9 -8.48,2.9 l 8.71,2.12 -2.26,-2.41 z m 11.52,-11.82 c -1.79,-8.16 -1.79,-8.16 -1.79,-8.16 l -1.97,8.08 1.9,-1.99 z" stroke="#000000" stroke-width="2.23952" /><path - id="F_carnitineAcylTransferaseII-0" + id="B_carnitineAcylTransferaseI" d="m 1964.3044,1732.0142 2.9061,-8.4623 2.1245,8.6918 -2.4151,-2.2553 z m -13.8526,13.4995 -8.1771,-1.7863 8.097,-1.9659 -1.9942,1.896 z" stroke="#000000" stroke-width="2.23952"
--- a/COBRAxy/src/marea.py Mon Nov 03 14:49:49 2025 +0000 +++ b/COBRAxy/src/marea.py Thu Dec 11 11:17:33 2025 +0000 @@ -239,7 +239,6 @@ # (threshold_F_C - 1) / (abs(threshold_F_C) + 1) con threshold_F_C > 1 return (avg1 - avg2) / (abs(avg1) + abs(avg2)) -# TODO: I would really like for this one to get the Thanos treatment def fix_style(l :str, col :Optional[str], width :str, dash :str) -> str: """ Produces a "fixed" style string to assign to a reaction arrow in the SVG map, assigning style properties to the corresponding values passed as input params.
