Mercurial > repos > bimib > cobraxy
comparison COBRAxy/utils/model_utils.py @ 500:4e7e67693ce7 draft
Uploaded
| author | francesco_lapi |
|---|---|
| date | Tue, 30 Sep 2025 16:39:30 +0000 |
| parents | a2f7a6dd9d0b |
| children | 9bfd1ec3ae6f |
comparison
equal
deleted
inserted
replaced
| 499:a2f7a6dd9d0b | 500:4e7e67693ce7 |
|---|---|
| 372 # pattern = r'(?:\d+(?:\.\d+)?\s+)?([A-Za-z0-9_]+_[A-Za-z0-9]+)' | 372 # pattern = r'(?:\d+(?:\.\d+)?\s+)?([A-Za-z0-9_]+_[A-Za-z0-9]+)' |
| 373 # matches = re.findall(pattern, reaction_formula) | 373 # matches = re.findall(pattern, reaction_formula) |
| 374 # metabolites.update(matches) | 374 # metabolites.update(matches) |
| 375 # return metabolites | 375 # return metabolites |
| 376 | 376 |
| 377 import re | 377 |
| 378 from typing import Set | |
| 379 | |
| 380 # Estrae tutti gli ID metaboliti nella formula (gestisce prefissi numerici + underscore e [comp]) | |
| 381 def extract_metabolites_from_reaction(reaction_formula: str) -> Set[str]: | 378 def extract_metabolites_from_reaction(reaction_formula: str) -> Set[str]: |
| 382 """ | 379 """ |
| 383 Estrae gli ID dei metaboliti da una formula di reazione. | 380 Extract metabolite IDs from a reaction formula. |
| 384 Gestisce: | 381 |
| 385 - coefficienti stechiometrici opzionali (interi o decimali) | 382 Handles: |
| 386 - compartimenti sia in forma [c] sia _c, sempre a fine metabolita | 383 - optional stoichiometric coefficients (integers or decimals) |
| 387 Restituisce gli ID includendo il suffisso di compartimento così come appare. | 384 - compartment tags at the end of the metabolite, either [c] or _c |
| 385 | |
| 386 Returns the IDs including the compartment suffix exactly as written. | |
| 388 """ | 387 """ |
| 389 pattern = re.compile( | 388 pattern = re.compile( |
| 390 r'(?:^|(?<=\s)|(?<=\+)|(?<=,)|(?<==)|(?<=:))' # confine a sinistra | 389 r'(?:^|(?<=\s)|(?<=\+)|(?<=,)|(?<==)|(?<=:))' # left boundary (start, space, +, comma, =, :) |
| 391 r'(?:\d+(?:\.\d+)?\s*)?' # coefficiente opzionale | 390 r'(?:\d+(?:\.\d+)?\s*)?' # optional coefficient |
| 392 r'([A-Za-z0-9_]+(?:\[[A-Za-z0-9]+\]|_[A-Za-z0-9]+))' # metabolita + compartimento | 391 r'([A-Za-z0-9_]+(?:\[[A-Za-z0-9]+\]|_[A-Za-z0-9]+))' # metabolite + compartment |
| 393 ) | 392 ) |
| 394 return {m.group(1) for m in pattern.finditer(reaction_formula)} | 393 return {m.group(1) for m in pattern.finditer(reaction_formula)} |
| 395 | 394 |
| 396 | 395 |
| 396 | |
| 397 def extract_compartment_from_metabolite(metabolite_id: str) -> str: | 397 def extract_compartment_from_metabolite(metabolite_id: str) -> str: |
| 398 """Extract the compartment from a metabolite ID.""" | 398 """Extract the compartment from a metabolite ID.""" |
| 399 if '_' in metabolite_id: | 399 if '_' == metabolite_id[-2]: |
| 400 return metabolite_id.split('_')[-1] | 400 return metabolite_id.split('_')[-1] |
| 401 if metabolite_id[-1] == ']' and metabolite_id[-3] == '[': | 401 if metabolite_id[-1] == ']' and metabolite_id[-3] == '[': |
| 402 return metabolite_id[-2] | 402 return metabolite_id[-2] |
| 403 return 'c' # default cytoplasm | 403 return 'c' # default cytoplasm |
| 404 | 404 |
