Mercurial > repos > bimib > cobraxy
changeset 538:fd53d42348bd draft default tip
Uploaded
| author | francesco_lapi |
|---|---|
| date | Sat, 25 Oct 2025 11:39:03 +0000 |
| parents | f79250e824b5 |
| children | |
| files | COBRAxy/README.md COBRAxy/docs/README.md COBRAxy/docs/installation.md COBRAxy/docs/tools/README.md COBRAxy/docs/tools/ras-generator.md COBRAxy/flux_simulation.xml COBRAxy/metabolicModel2Tabular.py COBRAxy/metabolicModel2Tabular.xml COBRAxy/ras_generator.xml COBRAxy/ras_to_bounds.xml COBRAxy/rps_generator.xml COBRAxy/setup.py COBRAxy/tabular2MetabolicModel.xml COBRAxy/utils/model_utils.py |
| diffstat | 14 files changed, 151 insertions(+), 208 deletions(-) [+] |
line wrap: on
line diff
--- a/COBRAxy/README.md Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/README.md Sat Oct 25 11:39:03 2025 +0000 @@ -65,7 +65,7 @@ ## Requirements -- **Python**: 3.8-3.11 +- **Python**: 3.8-3.12 - **OS**: Linux, macOS, Windows (Linux recommended) - **Dependencies**: Automatically installed via pip (COBRApy, pandas, numpy, etc.)
--- a/COBRAxy/docs/README.md Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/docs/README.md Sat Oct 25 11:39:03 2025 +0000 @@ -2,21 +2,27 @@ > A Python toolkit for metabolic flux analysis and visualization, with Galaxy integration. -COBRAxy transforms gene expression and metabolite data into meaningful metabolic insights through flux sampling and interactive pathway maps. +COBRAxy enables the integration of transcriptomics data with COBRA-based metabolic models, offering a comprehensive framework for studying metabolism in both health and disease. With COBRAxy, users can load and enrich metabolic models by incorporating transcriptomic data and adjusting the model’s medium conditions. ## Overview -COBRAxy provides a complete pipeline for metabolic modeling and analysis, from raw omics data to publication-ready pathway visualizations. Whether you're a researcher analyzing metabolic changes in disease, a systems biologist studying metabolic networks, or a bioinformatician building analysis pipelines, COBRAxy offers the tools you need. +COBRAxy enables constraint-based modeling and sampling techniques, allowing users to compute metabolic +flux distributions for multiple biological samples. The tool also enables the integration of medium +composition information to refine flux predictions. Additionally, COBRAxy provides a user-friendly interface +for visualizing significant flux differences between populations on an enriched metabolic map. This +extension provides a comprehensive and accessible framework for advanced metabolic analysis, enabling +researchers without extensive programming expertise to explore complex metabolic processes + +By offering an intuitive and accessible platform for multi-omics integration and metabolic analysis, COBRAxy meets the growing need for tools that help researchers explore complex metabolic processes with ease. ## Key Features +- **Galaxy Tools** - Web-based analysis with intuitive interface - **Reaction Activity Scores (RAS)** - Compute metabolic activity from gene expression data - **Reaction Propensity Scores (RPS)** - Infer metabolic preferences from metabolite abundance -- **Flux Sampling** - Sample metabolic flux distributions with CBS or OptGP algorithms -- **Statistical Analysis** - Perform pFBA, FVA, and sensitivity analysis -- **Interactive Maps** - Generate publication-ready pathway visualizations with SVG/PDF export -- **Galaxy Tools** - Web-based analysis with intuitive interface -- **Built-in Models** - Ready-to-use models including ENGRO2 and Recon +- **Flux computation** - Compute metabolic flux distributions using different optimization or sampling algorithms +- **Statistical Analysis** - Perform statistically significant flux differences between groups of samples and report on an enriched metabolic map +- **Built-in Models** - Ready-to-use models including ENGRO2 and Recon3D ## Quick Navigation @@ -31,10 +37,11 @@ ## Data Flow -COBRAxy follows two parallel analysis paths: +COBRAxy follows several analysis paths: -1. **Enrichment Analysis**: RAS + RPS → MAREA → Enriched Maps -2. **Flux Simulation**: RAS → Model Constraints → Flux Sampling → Flux Maps +1. **RAS Enrichment Analysis**: RAS computation → MAREA → Enriched Maps +2. **Flux Enrichment Analysis Simulation**: RAS computation → Model Constraints → Flux Sampling → Flux Maps +3. **RAS/RPS Enrichment Analysis**: RAS + RPS computation → MAREA → Enriched Maps ## Community & Support
--- a/COBRAxy/docs/installation.md Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/docs/installation.md Sat Oct 25 11:39:03 2025 +0000 @@ -4,7 +4,7 @@ ## System Requirements -- **Python**: 3.8-3.11 +- **Python**: 3.8-3.12 - **Operating System**: Linux (recommended), macOS, Windows - **Storage**: 2GB free space for installation and temporary files @@ -34,50 +34,7 @@ ## Dependencies -COBRAxy automatically installs its Python dependencies: - -- **COBRApy** - Core metabolic modeling -- **pandas** - Data manipulation -- **numpy** - Numerical computations -- **scipy** - Scientific computing - -## Optional System Libraries - -Install additional libraries for enhanced features: - -### Ubuntu/Debian - -```bash -# Install GLPK solver -sudo apt-get update -sudo apt-get install libglpk40 glpk-utils - -# Install libvips for SVG processing -sudo apt-get install libvips - -# Install Python GLPK bindings -pip install swiglpk -``` - -### macOS - -```bash -# Using Homebrew -brew install glpk vips - -# Install Python bindings -pip install swiglpk -``` - -### Windows - -```bash -# Using conda (recommended for Windows) -conda install -c conda-forge glpk - -# Or using pip -pip install swiglpk -``` +COBRAxy automatically installs its Python dependencies (COBRApy, pandas, numpy, etc.) ## Verify Installation @@ -87,39 +44,6 @@ # Check if COBRAxy tools are available ras_generator --help flux_simulation --help - -# Test with example data (if available) -cd COBRAxy -python testing.py -``` - -## Troubleshooting Installation - -### Common Issues - -**Import Error: No module named 'cobra'** -```bash -# Install COBRApy manually -pip install cobra -``` - -**GLPK solver not found** -```bash -# Install GLPK solver -# Ubuntu/Debian: sudo apt-get install glpk-utils -# macOS: brew install glpk -# Then: pip install swiglpk -``` - -**Permission denied errors** -```bash -# Use user installation -pip install --user . -# Or use virtual environment (recommended) -python -m venv cobraxy-env -source cobraxy-env/bin/activate # Linux/macOS -# cobraxy-env\Scripts\activate # Windows -pip install . ``` ## Virtual Environment (Recommended)
--- a/COBRAxy/docs/tools/README.md Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/docs/tools/README.md Sat Oct 25 11:39:03 2025 +0000 @@ -1,15 +1,3 @@ -# Tool| Tool | Purpose | Input | Output | -|------|---------|--------|---------| -| [RAS Generator](ras-generator.md) | Compute reaction activity scores | Gene expression + GPR rules | RAS values | -| [RPS Generator](rps-generator.md) | Compute reaction propensity scores | Metabolite abundance | RPS values | -| [MAREA](marea.md) | Statistical pathway enrichment | RAS/RPS data | Enriched maps + statistics | -| [RAS to Bounds](ras-to-bounds.md) | Apply RAS constraints to model | RAS + SBML model | Constrained bounds | -| [Flux Simulation](flux-simulation.md) | Sample metabolic fluxes | Constrained model | Flux distributions | -| [Flux to Map](flux-to-map.md) | Visualize flux data on maps | Flux samples + statistical comparison | Color-coded pathway maps | -| [Model Setting](metabolic-model-setting.md) | Extract model components | SBML/JSON/MAT/YML model | Tabular model data | -| [Tabular to Model](tabular-to-model.md) | Create COBRA models | Tabular reaction data | SBML/JSON/MAT/YAML models | -| [MAREA Cluster](marea-cluster.md) | Cluster analysis | Expression/RAS/RPS/flux data | Sample clusters + validation plots |ation - Complete reference for all COBRAxy tools with parameters, examples, and usage guidelines. ## Available Tools @@ -42,6 +30,9 @@ ## Usage Patterns +### Galaxy Integration +All tools include Galaxy XML wrappers for web-based usage through the Galaxy interface. + ### Command Line Usage ```bash # Basic pattern for all tools @@ -51,18 +42,6 @@ ras_generator -td $(pwd) -in expression.tsv -ra ras_output.tsv -rs ENGRO2 ``` -### Python API Usage -```python -import tool_module - -# All tools accept argument lists -args = ['-td', '/path/to/cobraxy', '-in', 'input.tsv', '-out', 'output.tsv'] -tool_module.main(args) -``` - -### Galaxy Integration -All tools include Galaxy XML wrappers for web-based usage through the Galaxy interface. - ## Parameter Reference ### File Format Requirements @@ -87,9 +66,8 @@ | Model | Organism | Reactions | Genes | Best For | |-------|----------|-----------|-------|----------| -| **ENGRO2** | Human | ~2,000 | ~500 | Focused analysis, faster computation | -| **Recon** | Human | ~10,000 | ~2,000 | Comprehensive metabolism | -| **HMRcore** | Human | ~5,000 | ~1,000 | Balanced coverage | +| **ENGRO2** | Human | ~500 | ~500 | Focused analysis, faster computation | +| **RECON3D** | Human | ~10,000 | ~2,000 | Comprehensive metabolism | ## Tool Selection Guide
--- a/COBRAxy/docs/tools/ras-generator.md Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/docs/tools/ras-generator.md Sat Oct 25 11:39:03 2025 +0000 @@ -65,22 +65,15 @@ **Gene Mapping**: Each gene in the expression data is mapped to reactions via GPR rules. **Logical Operations**: -- **OR**: `Gene1 or Gene2` → `max(expr1, expr2)` or `expr1 + expr2` +- **OR**: `Gene1 or Gene2` → `expr1 + expr2` - **AND**: `Gene1 and Gene2` → `min(expr1, expr2)` **Missing Gene Handling**: -- `-n true`: Missing genes treated as 0, OR operations continue -- `-n false`: Missing genes cause reaction score to be null +- `-n true`: Ignore missing genes in the GPR rules. +- `-n false`: Missing genes cause reaction score to be NaN ### RAS Computation -For each reaction and sample: - -1. **Parse GPR rule** into nested logical structure -2. **Replace gene names** with expression values -3. **Evaluate logical operations** recursively -4. **Assign RAS score** based on final result - **Example**: ``` GPR: (HGNC:5 and HGNC:10) or HGNC:15 @@ -154,21 +147,15 @@ ### ENGRO2 (Recommended for most analyses) - **Scope**: Focused human metabolism -- **Reactions**: ~2,000 +- **Reactions**: ~500 - **Genes**: ~500 -- **Use case**: General metabolic analysis +- **Use case**: Core metabolic analysis ### Recon (Comprehensive analysis) - **Scope**: Complete human metabolism - **Reactions**: ~10,000 - **Genes**: ~2,000 -- **Use case**: Detailed metabolic studies - -### HMRcore (Balanced option) -- **Scope**: Core human metabolism -- **Reactions**: ~5,000 -- **Genes**: ~1,000 -- **Use case**: Balanced coverage +- **Use case**: Genome-wide metabolic studies ## Gene ID Mapping @@ -194,7 +181,7 @@ Solution: Check gene ID format matches model expectations - Verify gene identifiers (HGNC vs symbols vs Ensembl) - Use gene mapping tools if needed -- Set -n true to handle missing genes gracefully +- Set -n true to handle missing genes ``` **"No computable scores" error** @@ -249,11 +236,6 @@ print(f"Reactions with no data: {null_reactions}") ``` -### Expected Results - -- **Coverage**: 60-90% of reactions should have computable scores -- **Range**: RAS values typically 0-20 for log-transformed expression -- **Distribution**: Should reflect biological variation in your samples ## Integration with Other Tools
--- a/COBRAxy/flux_simulation.xml Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/flux_simulation.xml Sat Oct 25 11:39:03 2025 +0000 @@ -94,14 +94,14 @@ <inputs> <conditional name="model_and_bounds"> - <param name="model_and_bounds" argument="--model_and_bounds" type="select" label="Upload mode:" help="Choose whether to upload the model and bounds in separate files or to upload multiple complete model files."> + <param name="model_and_bounds" argument="--model_and_bounds" type="select" label="Upload model:" help="Choose whether to upload the model and bounds in separate files or to upload multiple complete model files."> <option value="True" selected="true">Model + bounds (separate files)</option> <option value="False">Multiple complete models</option> </param> <when value="True"> <param name="model_upload" argument="--model_upload" type="data" format="csv,tsv,tabular" - label="Model (rules) file:" + label="Tabular model file:" help="Upload a CSV/TSV file that contains the model reaction rules. Recommended columns: ReactionID, Reaction (formula), Rule (GPR). Optional columns: name, lower_bound, upper_bound, InMedium. If bounds are present here they may be overridden by separate bound files." /> <param name="inputs" argument="--inputs" multiple="true" type="data" format="tabular,csv,tsv" @@ -206,37 +206,52 @@ <help> <![CDATA[ -What it does +Overview ------------- -This tool generates flux samples starting from metabolic models using CBS (Corner-based sampling) or OPTGP (Improved Artificial Centering Hit-and-Run sampler) algorithms. +This tool generates flux samples from a set of metabolic models. It supports two input modes: + - Model + bounds: upload a single base model and multiple bound files (one per context/cell type) + - Multiple complete models: upload multiple model files, each already containing its own bounds. -Two upload modes are supported: -1. **Model + bounds**: Upload one base model and multiple bound files (one per context/cell type) -2. **Multiple complete models**: Upload multiple complete model files, each with integrated bounds +In the first mode: + - the base model must be in tabular format as produced by the metabolicModel2Tabular tool. + - the bound files should come from the RAStoBounds tool. + +In the second mode, provide a separate tabular file for each complete model. + +Available analyses +------------- -It can return sampled fluxes by applying summary statistics: - - mean - - median - - quantiles (0.25, 0.50, 0.75) +Two types of analysis are available: + - flux optimization + - flux sampling -Flux analysis can be performed over the metabolic model by using the objective function already set in the model. The following analyses are supported: - - parsimonious-FBA (optimized by Biomass) - - FVA (with configurable optimality percentage) - - Biomass sensitivity analysis (single reaction knock-out) +For flux optimization, one of the following methods can be performed: + - parsimonious-FBA + - Flux Variability Analysis + - Biomass sensitivity analysis (single reaction knock-out) +The objective function — a linear combination of fluxes weighted by specific coefficients — depends on the provided metabolic network. + +For flux sampling, one of the following methods can be performed: + - CBS (Corner-based sampling) + - OPTGP (Improved Artificial Centering Hit-and-Run sampler) algorithms. + Output: ------------- -The tool generates: +The tool produces: - Samples: reporting the sampled fluxes for each reaction (reaction names on the rows and sample names on the columns). Format: tab-separated. - a log file (.txt). +The sampled fluxes can be reported as full datasets or summarized using descriptive statistics such as mean, median, and quantiles (0.25, 0.50, 0.75), computed for each model. + **TIP**: Bounds generated by RAStoBound are grouped in a collection. You can select collections by clicking on "Dataset Collection" option in the "Bound file(s):" input parameter. -**TIP**: The Batches parameter helps maintain memory efficiency. For 10,000 samples, use n_samples=1,000 and n_batches=10. +**TIP**: The Batches parameter helps maintain memory efficiency. For example, for 10,000 samples, use n_samples=1,000 and n_batches=10. -**TIP**: The Thinning parameter for OPTGP helps converge to stationary distribution. +**TIP**: Adjust the Thinning parameter to improve convergence toward the stationary distribution. +Common thinning values are 100 or 1000.Note that if you set thinning = 100 and request 100 samples, the total number of generated flux samples will be 100 * 100. **TIP**: FVA optimality percentage allows you to explore suboptimal flux ranges. 100% restricts to optimal solutions, while lower values (e.g., 90%) allow broader flux ranges. ]]>
--- a/COBRAxy/metabolicModel2Tabular.py Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/metabolicModel2Tabular.py Sat Oct 25 11:39:03 2025 +0000 @@ -22,7 +22,7 @@ ARGS : argparse.Namespace def process_args(args: List[str] = None) -> argparse.Namespace: """ - Parse command-line arguments for metabolic_model_setting. + Parse command-line arguments. """ parser = argparse.ArgumentParser( @@ -342,7 +342,7 @@ if not expected or not os.path.exists(expected) or os.path.getsize(expected) == 0: raise utils.DataErr(expected, "Output not created or empty") - print("Metabolic_model_setting: completed successfully") + print("Completed successfully") if __name__ == '__main__':
--- a/COBRAxy/metabolicModel2Tabular.xml Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/metabolicModel2Tabular.xml Sat Oct 25 11:39:03 2025 +0000 @@ -105,7 +105,7 @@ <filter>cond_model['model_selector'] == 'Recon'</filter> </data> - <data name="out_tabular_custom" format="tabular" label="Custom_model_tabular"> + <data name="out_tabular_custom" format="tabular" label="${cond_model.input.element_identifier}_model_tabular"> <filter>cond_model['model_selector'] == 'Custom_model'</filter> </data> </outputs>
--- a/COBRAxy/ras_generator.xml Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/ras_generator.xml Sat Oct 25 11:39:03 2025 +0000 @@ -25,11 +25,11 @@ </command> <inputs> <param name="model_upload" argument="--model_upload" type="data" format="csv,tsv,tabular" - label="Model file:" help="Upload a CSV/TSV file containing the information generated by the Model Initialization tool." /> + label="Model tabular file:" help="Upload the CSV/TSV file containing the information generated by the metabolicModel2Tabular tool." /> <param name="input" argument="--input" type="data" format="tabular,csv,tsv" label="Gene Expression dataset:" /> <param name="name" argument="--name" type="text" label="Dataset's name:" value="Dataset_RAS" help="Default: Dataset_RAS. Do not use white spaces or special symbols." /> - <param name="none" argument="--none" type="boolean" checked="true" label="(A and NaN) solved as (A)?" /> + <param name="none" argument="--none" type="boolean" checked="true" label="Ignore NaN in AND and OR expression?" /> </inputs> <outputs> @@ -40,37 +40,28 @@ <help> <![CDATA[ -What it does +Overview ------------- -This tool computes Reaction Activity Scores from gene expression (RNA-seq) dataset(s), as described in Graudenzi et al. Integration of transcriptomic data and metabolic networks in cancer samples reveals highly significant prognostic power. Journal of Biomedical Informatics, 2018, 87: 37-49. - -Accepted files: - - A gene expression dataset - -Format: -Tab-separated text file reporting the normalized expression level (e.g., TPM, RPKM, ...) of each gene (row) for a given sample (column). All values must be positive to correctly compute the RAS. -Column header: sample ID. -Row header: gene ID. - +This tool computes Reaction Activity Scores (RAS) from gene expression (RNA-seq) dataset(s), as described in Graudenzi et al. 2018. + +The tool has four input parameters: + - model file: tabular file containing information (reactionID and GPR) for RAS computation (see TIP 1) + - Gene expression dataset: Tab-separated text file reporting the gene expression values (see TIP 2) + - Dataset name: choose the name of the ras expression dataset + - Ignore NaN: if TRUE expression as (A and NaN) or (A or NaN) are solved as (A), if FALSE are solved as NaN. -Optional files: - - custom GPR (Gene-Protein-Reaction) rules. Two accepted formats: - - * (Cobra Toolbox and CobraPy compliant) xml of metabolic model; - * .csv file specifyig for each reaction ID (column 1) the corresponding GPR rule (column 2). +**TIP 1** The model tabular file can be the one obtained from metabolicmodel2tabular file or can be a custom file BUT in the same format. -Computation option ‘(A and NaN) solved as (A)’: -In case of missing expression value, referred to as NaN (Not a Number), for a gene joined with an AND operator in a given GPR rule, the rule ‘A and NaN’ - -If YES is selected: the GPR will be solved as A. - -If NO is selected: the GPR will be disregarded tout-court (i.e., treated as NaN). +**TIP 2** The dataset must the expression levels of each gene (row) for a given sample (column). Column header: sample ID. +Row header: gene ID. All gene expression values must be positive (e.g. raw counts, TPM, or RPKM) to correctly compute the RAS. + + Example input ------------- -Custom GPR rules: +GPR rules: +------------+--------------------------------------+ | id | rule (with entrez-id |
--- a/COBRAxy/ras_to_bounds.xml Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/ras_to_bounds.xml Sat Oct 25 11:39:03 2025 +0000 @@ -61,29 +61,63 @@ <![CDATA[ -What it does +Overview ------------- -This tool generates the reaction bounds for a given tabular model created by the Metabolic Model Setting Tool and the Reaction Activity Scores (RAS) matrix generated by the RAS Generator. +This tool computes reaction bounds for a tabular metabolic model, combining information from: + - A tabular model generated by the Metabolic Model Setting Tool (metabolicModel2Tabular), and + - One or more Reaction Activity Score (RAS) matrices produced by the RAS Generator (Expression2RAS). -Accepted files: - - A tabular model: tab-separated file containing information about a metabolic model. - - RAS matrix: tab-separated RAS file as returned by RAS generator. Multiple RAS files having different file name can be uploaded too (e.g. one RAS matrix for normal cells and one for cancer cells). Note that if multiple RAs matrices are uploaded, the bounds are normalzed across all cells. +Input: +------------- - -Example for multiple RAS matrices: - - cancer.csv and normal.csv generated by RAS generator tool (the two class names are 'cancer' and 'normal'). - - This tool returns one unique collection of bounds files for both cancer and normal cells (normalization is performed across all cells). - - The association cell-class is reported in the 'cell_class' file that is useful to perform flux enrichment analysis based on class partenrship. +The tool has two types of input files: + - Model tabular file: a tab-separated file containing the structure of the metabolic model (reactions, metabolites, etc.). + - RAS matrix: tab-separated files containing the reaction activity scores. + +If "Save models with applied bounds?" is set to TRUE, it is possible to save a collection of models, one for each sample and with its specific constraints + +You can upload multiple RAS files (e.g. one for normal cells and one for cancer cells). +When multiple RAS matrices are provided, the computed bounds are normalized across all samples in the dataset. + Output: ------------- -The tool generates: - - A collection of tab files, one for each sample. Each file contains the lower and upper bounds computed from the RAS values and the FVA, used to perform flux sampling or optimization. - - Classes: a file containing the class of each sample. The class name of a RAS matrix corresponds to its file name. Format: tab-separated. +The tool generates three outputs: + - Collection of tabular files: one per sample, containing the lower and upper bounds for all reactions. + - Classes: a file listing the class assigned to each sample. The class name of a RAS matrix corresponds to its file name. Format: tab-separated. - a log file (.txt). + +The lower and upper bounds are calculated, as described in Di Filippo et al. (2020), using the RAS values and the Flux Variability Analysis (FVA) results. These bounds are then used as inputs for flux simulation tools. + +If a reaction i has a RAS value R_i, its upper bound is computed as R_i * UB, where UB is the maximum flux value obtained from the FVA analysis for that reaction. +Similarly, the lower bound is computed as R_i * LB, where LB is the minimum flux value obtained from the FVA analysis. + +RAS values are normalized across all samples between 0 and 1. + +If multiple RAS matrices are uploaded, the normalization is performed across all cells in the dataset to ensure consistent scaling. + +Example for multiple RAS matrices: +- Input files: cancer.csv and normal.csv, generated by the RAS Generator tool (the corresponding class names are "cancer" and "normal"). +- The tool produces one unified collection of bounds files for both cancer and normal cells, with normalization applied across all cells. +- The mapping between samples and their corresponding classes is provided in the "cell_class" file, which can be used for downstream flux enrichment analysis based on class grouping. + +Example + +Assume the tabular model includes a reaction named "R_GLCt1r" (glucose transport) and the FVA determined its flux range as: +- Lower bound (LB) = 0 +- Upper bound (UB) = 20 + +If the RAS values are: +- RAS_normal = 0.5 +- RAS_cancer = 0.9 + +Then the calculated bounds are: +- For normal cells: lower bound = 0.5 * 0 = 0; upper bound = 0.5 * 20 = 10 +- For cancer cells: lower bound = 0.9 * 0 = 0; upper bound = 0.9 * 20 = 18 + ]]> </help> <expand macro="citations" />
--- a/COBRAxy/rps_generator.xml Sat Oct 25 11:05:14 2025 +0000 +++ b/COBRAxy/rps_generator.xml Sat Oct 25 11:39:03 2025 +0000 @@ -35,10 +35,10 @@ <help> <