Skip to content

Commit ac62f9b

Browse files
author
Christopher Henry
committed
Improvements to expression object
1 parent 65c7401 commit ac62f9b

File tree

2 files changed

+33
-12
lines changed

2 files changed

+33
-12
lines changed

modelseedpy/core/msmodelutl.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,7 @@ def __init__(self, model):
381381
self.attributes = {}
382382
self.atp_tests = None
383383
self.reliability_scores = None
384+
self.util=None
384385
if hasattr(self.model, "computed_attributes"):
385386
if self.model.computed_attributes:
386387
self.attributes = self.model.computed_attributes

modelseedpy/multiomics/msexpression.py

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -567,22 +567,37 @@ def translate_data(self, target_type: str) -> 'MSExpression':
567567
for feature in self.features:
568568
value = feature.get_value(condition)
569569
if value is not None:
570-
if self.type == "AbsoluteAbundance":
570+
if self.type == "AbsoluteAbundance" or self.type == "FPKM" or self.type == "TPM":
571571
if target_type == "RelativeAbundance":
572-
value = value / condition.sum_value()
572+
if condition.sum_value() > 0.01:
573+
value = value / condition.sum_value()
574+
else:
575+
value = 0
573576
elif target_type == "NormalizedRatios":
574-
value = value / condition.highest_value()
577+
if condition.highest_value() > 0.01:
578+
value = value / condition.highest_value()
579+
else:
580+
value = 0
575581
else:
576582
raise ValueError(
577583
f"Translation from {self.type} to {target_type} not supported"
578584
)
585+
elif self.type == "Log2":
586+
ave_val = condition.average_value()
587+
col_sum = condition.sum_value()
588+
n_features = len(self.features)
589+
denominator = (2 ** (col_sum - n_features * ave_val))
590+
if denominator > 0.01:
591+
transformed_value = (2 ** (value - ave_val)) / denominator
592+
else:
593+
transformed_value = 0
579594
else:
580595
raise ValueError(
581596
f"Translation from {self.type} to {target_type} not supported"
582597
)
583598
new_expression._data.loc[feature.id, condition.id] = value
584599
return new_expression
585-
600+
586601
def fit_model_flux_to_data(
587602
self,
588603
model: 'MSModelUtil',
@@ -707,7 +722,9 @@ def fit_model_flux_to_data(
707722
)
708723

709724
rxn_expression = self
710-
725+
726+
model.util.save("reaction_expression_data", rxn_expression._data.to_dict())
727+
711728
# Task 2.5-2.13: Expression type transformation
712729
if rxn_expression.type != "RelativeAbundance" and rxn_expression.type != "NormalizedRatios":
713730
# Task 2.10: Log transformation
@@ -738,17 +755,20 @@ def fit_model_flux_to_data(
738755
value = rxn_expression.get_value(feat.id, cond.id)
739756
if value is not None:
740757
# Task 2.6-2.9: Apply transformation formulas
741-
if rxn_expression.type == "AbsoluteAbundance":
742-
transformed_value = value / cond.sum_value()
743-
elif rxn_expression.type == "FPKM":
744-
transformed_value = value / cond.sum_value()
745-
elif rxn_expression.type == "TPM":
746-
transformed_value = value / cond.sum_value()
758+
if rxn_expression.type == "AbsoluteAbundance" or rxn_expression.type == "FPKM" or rxn_expression.type == "TPM":
759+
if cond.sum_value() > 0.01:
760+
transformed_value = value / cond.sum_value()
761+
else:
762+
transformed_value = 0
747763
elif rxn_expression.type == "Log2":
748764
ave_val = cond.average_value()
749765
col_sum = cond.sum_value()
750766
n_features = len(rxn_expression.features)
751-
transformed_value = (2 ** (value - ave_val)) / (2 ** (col_sum - n_features * ave_val))
767+
denominator = (2 ** (col_sum - n_features * ave_val))
768+
if denominator > 0.01:
769+
transformed_value = (2 ** (value - ave_val)) / denominator
770+
else:
771+
transformed_value = 0
752772
else:
753773
transformed_value = value
754774

0 commit comments

Comments
 (0)