Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
293d337
Merge branch 'main' of github.com:HelikarLab/COMO into develop
JoshLoecker Dec 9, 2024
c7b234f
Merge branch 'develop' of github.com:HelikarLab/COMO into develop
JoshLoecker Dec 9, 2024
f72eff9
feat: add boundary column
JoshLoecker Dec 9, 2024
7b58147
fix: allow new boundary column
JoshLoecker Dec 9, 2024
b59368c
Merge pull request #196 from HelikarLab/hotfix
JoshLoecker Dec 9, 2024
897d4c0
feat: write zFPKM graphs
JoshLoecker Dec 9, 2024
6edf235
Merge pull request #197 from HelikarLab/hotfix
JoshLoecker Dec 9, 2024
355b9df
refactor: remove rnaseq.py
JoshLoecker Dec 9, 2024
a43b20d
refactor: import items from rnaseq.py
JoshLoecker Dec 9, 2024
5675a35
refactor: remove command line usage
JoshLoecker Dec 9, 2024
b5a199c
refactor: add classes for rna processing
JoshLoecker Dec 9, 2024
5a2dd33
feat: added k_over_a calculation
JoshLoecker Dec 9, 2024
fbb2b76
feat: added genefilter function
JoshLoecker Dec 9, 2024
1de1717
refactor: create separate read_counts matrix
JoshLoecker Dec 9, 2024
279f7cc
feat: bring zfpkm_filter from rnaseq.py
JoshLoecker Dec 9, 2024
7e2fe3d
feat: added matrix builder
JoshLoecker Dec 9, 2024
9eaa2ac
feat: added tpm calculation
JoshLoecker Dec 9, 2024
3670016
feat: added fpkm calculation
JoshLoecker Dec 9, 2024
1cd4dbb
feat: added zfpkm transformation and calculation
JoshLoecker Dec 9, 2024
dd8698e
feat: added zfpkm plotting
JoshLoecker Dec 9, 2024
01db1ef
feat: aded calculate z score
JoshLoecker Dec 9, 2024
a47f752
feat: added cpm filtering
JoshLoecker Dec 9, 2024
b6460c2
feat: added tpm quantile filtering
JoshLoecker Dec 9, 2024
e0c98b4
feat: added root filtering logic
JoshLoecker Dec 9, 2024
a4d6f2f
feat: added logic for performing statistical tests
JoshLoecker Dec 9, 2024
e9665bf
feat: create metadata df
JoshLoecker Dec 9, 2024
dc7c1fe
refactor: allow passing specific filepaths
JoshLoecker Dec 9, 2024
f35e09a
refactor: rename variable names for easier reuse
JoshLoecker Dec 9, 2024
763b51a
fix: use better column names
JoshLoecker Dec 9, 2024
a0754d6
fix: match new column names
JoshLoecker Dec 9, 2024
8f94a48
Merge branch 'main' into hotfix
JoshLoecker Dec 9, 2024
d5bc837
Merge pull request #198 from HelikarLab/hotfix
JoshLoecker Dec 9, 2024
fc803bc
style: update log message, more pythonic code
JoshLoecker Dec 10, 2024
8bdddd9
style: variable rename
JoshLoecker Dec 10, 2024
e0d84be
feat: update to match new approach
JoshLoecker Dec 10, 2024
b0e4801
chore(deps): bump astral-sh/setup-uv from 3 to 4
dependabot[bot] Dec 10, 2024
db6e683
chore(deps): bump astral-sh/ruff-action from 1 to 2
dependabot[bot] Dec 10, 2024
dd3eb0d
fix: set solver using cobra configuration
JoshLoecker Dec 10, 2024
9674459
revert: use mrna instead of polya
JoshLoecker Dec 10, 2024
cde6606
refactor: check files returned
JoshLoecker Dec 10, 2024
b14d3f9
feat: allow specifying specific directories
JoshLoecker Dec 10, 2024
d52b0ee
style: use more descriptive variable names
JoshLoecker Dec 10, 2024
fe1d406
refactor: use early continue
JoshLoecker Dec 10, 2024
8f1d027
style: update warning messages
JoshLoecker Dec 10, 2024
0ef736e
style: rename variables
JoshLoecker Dec 10, 2024
3825aa2
refactor: move filtering technique to types
JoshLoecker Dec 10, 2024
b0fa60e
fix: do not use more cores than necessary
JoshLoecker Dec 10, 2024
e8d3fd5
fix: set cobra solver earlier
JoshLoecker Dec 10, 2024
322f948
refactor: remove troppo and cobamp for CC testing
JoshLoecker Dec 10, 2024
6cc2a7b
chore: bump version
JoshLoecker Dec 11, 2024
4a33180
chore: bump version
JoshLoecker Dec 11, 2024
3e495f6
revert: require troppo and cobamp
JoshLoecker Dec 11, 2024
74d55c9
revert: install troppo and cobamp from modified repo
JoshLoecker Dec 11, 2024
b2a6e0f
feat: set troppo solver
JoshLoecker Dec 11, 2024
baca9e7
fix: provide solver to imat build function
JoshLoecker Dec 11, 2024
bb2611c
fix: temporarily install troppo from develop
JoshLoecker Dec 11, 2024
cced1b6
fix: install from branch
JoshLoecker Dec 11, 2024
2e64db4
refactor: install troppo/cobamp from github
JoshLoecker Dec 11, 2024
1c6743b
fix: use proper installation for troppo/cobamp
JoshLoecker Dec 11, 2024
0a0ac4d
fix: use correct branch for cobamp
JoshLoecker Dec 11, 2024
091f4bc
chore: reset troppo branch
JoshLoecker Dec 11, 2024
5417157
fix: solver must be uppercase
JoshLoecker Dec 11, 2024
157f2e5
chore: remove print
JoshLoecker Dec 11, 2024
4fa324c
chore: fix typo
JoshLoecker Dec 11, 2024
93c263e
Merge pull request #202 from HelikarLab/fix/troppo-cobamp-requirement
JoshLoecker Dec 11, 2024
97137d2
Merge pull request #201 from HelikarLab/dependabot/github_actions/ast…
JoshLoecker Dec 11, 2024
6a544f1
Merge pull request #200 from HelikarLab/dependabot/github_actions/ast…
JoshLoecker Dec 11, 2024
6c08b7b
chore: bump version
JoshLoecker Dec 11, 2024
7e018a5
Merge pull request #203 from HelikarLab/hotfix
JoshLoecker Dec 11, 2024
911aaaa
Merge branch 'main' into develop
JoshLoecker Dec 11, 2024
2bfe760
Merge branch 'main' into develop
JoshLoecker Dec 11, 2024
f8ebcbf
Merge branch 'develop' into remove-hardcoded-paths/rnaseq-gen
JoshLoecker Dec 11, 2024
6bd06e1
fix: use parenthesis to validate calculations
JoshLoecker Dec 11, 2024
f24347d
refactor: ignore missing variables for now
JoshLoecker Dec 11, 2024
1956721
chore: ignore complex function
JoshLoecker Dec 11, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
309 changes: 185 additions & 124 deletions main/COMO.ipynb

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion main/como/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
from como.utils import stringlist_to_list

__all__ = ["stringlist_to_list", "Config"]
__version__ = "1.10.0"
__version__ = "1.11.1"


def return_placeholder_data() -> pd.DataFrame:
Expand Down
53 changes: 31 additions & 22 deletions main/como/create_context_specific_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,9 +308,16 @@ def _build_with_imat(
expr_vector: npt.NDArray,
expr_thesh: tuple[float, float],
force_gene_ids: Sequence[int],
solver: str,
) -> (cobra.Model, pd.DataFrame):
expr_vector = np.array(expr_vector)
properties = IMATProperties(exp_vector=expr_vector, exp_thresholds=expr_thesh, core=force_gene_ids, epsilon=0.01)
properties = IMATProperties(
exp_vector=expr_vector,
exp_thresholds=expr_thesh,
core=force_gene_ids,
epsilon=0.01,
solver=solver.upper(),
)
algorithm = IMAT(s_matrix, np.array(lb), np.array(ub), properties)
context_rxns: npt.NDArray = algorithm.run()
fluxes: pd.Series = algorithm.sol.to_series()
Expand Down Expand Up @@ -507,7 +514,14 @@ def _build_model( # noqa: C901
elif recon_algorithm == Algorithm.IMAT:
context_model_cobra: cobra.Model
context_model_cobra, flux_df = _build_with_imat(
reference_model, s_matrix, lb, ub, expr_vector, exp_thresh, idx_force
reference_model,
s_matrix,
lb,
ub,
expr_vector,
exp_thresh,
idx_force,
solver=solver,
)
imat_reactions = flux_df.rxn
model_reactions = [reaction.id for reaction in context_model_cobra.reactions]
Expand Down Expand Up @@ -550,6 +564,7 @@ def _collect_boundary_reactions(path: Path) -> _BoundaryReactions:
df = _create_df(path)
for column in df.columns:
if column not in [
"boundary",
"reaction",
"abbreviation",
"compartment",
Expand All @@ -561,31 +576,25 @@ def _collect_boundary_reactions(path: Path) -> _BoundaryReactions:
f"'Minimum Reaction Rate', and 'Maximum Reaction Rate'. Found: {column}"
)

reactions: list[str] = []
reactions: list[str] = [""] * len(df)
boundary_type: list[str] = df["reaction"].tolist()
reaction_abbreviation: list[str] = df["abbreviation"].tolist()
reaction_compartment: list[str] = df["compartment"].tolist()
lower_bounds = df["minimum reaction rate"].tolist()
upper_bounds = df["maximum reaction rate"].tolist()
lower_bound = df["minimum reaction rate"].tolist()
upper_bound = df["maximum reaction rate"].tolist()
boundary_map = {"exchange": "EX", "demand": "DM", "sink": "SK"}
for i in range(len(boundary_type)):
current_type: str = boundary_type[i]
temp_reaction: str = ""

match current_type.lower():
case "exchange":
temp_reaction += "EX_"
case "demand":
temp_reaction += "DM_"
case "sink":
temp_reaction += "SK_"
boundary: str = boundary_type[i].lower()
if boundary not in boundary_map:
raise ValueError(f"Boundary reaction type must be 'Exchange', 'Demand', or 'Sink'. Found: {boundary[i]}")

shorthand_compartment = Compartments.get(reaction_compartment[i])
temp_reaction += f"{reaction_abbreviation[i]}[{shorthand_compartment}]"
reactions.append(temp_reaction)
reactions[i] = f"{boundary_map.get(boundary)}_{reaction_abbreviation[i]}[{shorthand_compartment}]"

return _BoundaryReactions(
reactions=reactions,
lower_bounds=lower_bounds,
upper_bounds=upper_bounds,
lower_bounds=lower_bound,
upper_bounds=upper_bound,
)


Expand Down Expand Up @@ -631,10 +640,10 @@ def create_context_specific_model( # noqa: C901
raise ValueError(f"Output file type {output_type} not recognized. Must be one of: 'xml', 'mat', 'json'")

if algorithm not in Algorithm:
raise ValueError(f"Algorithm {algorithm} not supported. Please use one of: GIMME, FASTCORE, or IMAT")
raise ValueError(f"Algorithm {algorithm} not supported. Use one of {', '.join(a.value for a in Algorithm)}")

if solver not in Solver:
raise ValueError(f"Solver '{solver}' not supported. Use 'GLPK' or 'GUROBI'")
raise ValueError(f"Solver '{solver}' not supported. Use one of {', '.join(s.value for s in Solver)}")

if boundary_rxns_filepath:
boundary_reactions = _collect_boundary_reactions(boundary_rxns_filepath)
Expand Down Expand Up @@ -667,7 +676,7 @@ def create_context_specific_model( # noqa: C901
bound_ub=boundary_reactions.upper_bounds,
exclude_rxns=exclude_rxns,
force_rxns=force_rxns,
solver=solver.value,
solver=solver.value.lower(),
low_thresh=low_threshold,
high_thresh=high_threshold,
)
Expand Down
Loading