Skip to content

Commit 89b3ac9

Browse files
authored
Merge pull request #37 from TieuLongPhan/dev
Add solution for nitro reduction
2 parents 5962c25 + 2985690 commit 89b3ac9

2 files changed

Lines changed: 71 additions & 0 deletions

File tree

CITATION.cff

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
cff-version: 1.2.0
2+
message: "If you use this software, please cite it as below."
3+
authors:
4+
- family-names: "Phan"
5+
given-names: "Tieu-Long"
6+
orcid: "https://orcid.org/0000-0000-0000-0000"
7+
- family-names: "Weinbauer"
8+
given-names: "Klaus"
9+
orcid: "https://orcid.org/0000-0000-0000-0000"
10+
- family-names: "Gärtner"
11+
given-names: "Thomas"
12+
- family-names: "Merkle"
13+
given-names: "Daniel"
14+
- family-names: "Andersen"
15+
given-names: "Jakob L."
16+
- family-names: "Fagerberg"
17+
given-names: "Rolf"
18+
- family-names: "Stadler"
19+
given-names: "Peter F."
20+
title: "Reaction rebalancing: a novel approach to curating reaction databases"
21+
version: 1.0.0
22+
doi: 10.1186/s13321-024-00875-4
23+
preferred-citation:
24+
authors:
25+
- family-names: "Phan"
26+
given-names: "Tieu-Long"
27+
orcid: "https://orcid.org/0000-0000-0000-0000"
28+
- family-names: "Weinbauer"
29+
given-names: "Klaus"
30+
orcid: "https://orcid.org/0000-0000-0000-0000"
31+
- family-names: "Gärtner"
32+
given-names: "Thomas"
33+
- family-names: "Merkle"
34+
given-names: "Daniel"
35+
- family-names: "Andersen"
36+
given-names: "Jakob L."
37+
- family-names: "Fagerberg"
38+
given-names: "Rolf"
39+
- family-names: "Stadler"
40+
given-names: "Peter F."
41+
title: "Reaction rebalancing: a novel approach to curating reaction databases"
42+
type: "article"
43+
date-released: 2024-07-19
44+
url: "https://doi.org/10.1186/s13321-024-00875-4"

synrbl/rule_based.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,33 @@ def run(self, reactions, stats=None):
6565
both_side = BothSideReact(react_dict, product_dict, unbalance, diff_formula)
6666
diff_formula, unbalance = both_side.fit(n_jobs=self.n_jobs)
6767

68+
# Handle oxidation case
69+
for index, formula in enumerate(diff_formula):
70+
if unbalance[index] == "Both":
71+
# Extract oxygen ratio if present, or skip to next iteration if absent.
72+
water_ratio = formula.get("O")
73+
if water_ratio is None:
74+
continue
75+
76+
hydrogen_change = 2 * water_ratio
77+
additional_oxygen = ".O" * water_ratio
78+
79+
# Update the reactions list with additional oxygen on both specified keys.
80+
reactions[index]["products"] += additional_oxygen
81+
reactions[index][self.reaction_col] += additional_oxygen
82+
83+
# Remove the 'O' key as it's processed now.
84+
del formula["O"]
85+
86+
formula["H"] = formula.get("H", 0) - hydrogen_change
87+
88+
# Check the new hydrogen count to update balance status.
89+
if formula["H"] >= 0:
90+
unbalance[index] = "Products"
91+
else:
92+
formula["H"] = -formula["H"]
93+
unbalance[index] = "Reactants"
94+
6895
_reactions = pd.concat(
6996
[
7097
pd.DataFrame(reactions),

0 commit comments

Comments
 (0)