From 4aff24670f2eb967c2584ec096479552fffff21b Mon Sep 17 00:00:00 2001 From: Christian Hill Date: Tue, 1 Feb 2022 20:55:40 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Canonicalise=20hv=20and=20e=20to=20h=CE=BD?= =?UTF-8?q?=20and=20e-=20in=20StatefulSpecies?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pyvalem/formula.py | 3 +++ src/pyvalem/reaction.py | 1 + tests/test_formula.py | 1 + tests/test_reaction.py | 14 +++++++++++--- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/pyvalem/formula.py b/src/pyvalem/formula.py index 034568e..5a6a3b1 100644 --- a/src/pyvalem/formula.py +++ b/src/pyvalem/formula.py @@ -315,6 +315,9 @@ def _parse_formula(self, formula): # photons, electrons, positrons and "M", denoting an unspecified # "third-body" in many reactions. Note that M does not have a defined # charge or mass. + if formula == "e": + # Quietly convert e to e-. + self.formula = formula = "e-" if formula in special_cases: for attr, val in special_cases[formula].items(): setattr(self, attr, val) diff --git a/src/pyvalem/reaction.py b/src/pyvalem/reaction.py index 4800cec..9c24f55 100644 --- a/src/pyvalem/reaction.py +++ b/src/pyvalem/reaction.py @@ -249,6 +249,7 @@ def _parse_species(self, lhs_str, rhs_str): ) ss = StatefulSpecies(ss_str) species.append((n, ss)) + ss_str = str(ss) if ss_str not in species_map: species_map[ss_str] = 0 species_map[ss_str] += n diff --git a/tests/test_formula.py b/tests/test_formula.py index a4ed070..2db2902 100644 --- a/tests/test_formula.py +++ b/tests/test_formula.py @@ -134,6 +134,7 @@ def test_special_formulas(self): ), "hv": ("hν", "hν", r"h\nu", "hv", 0, None, 0, {}), } + f["e"] = f["e-"] f["hν"] = f["hv"] for f_str in f: diff --git a/tests/test_reaction.py b/tests/test_reaction.py index 9247b3b..dd3d274 100644 --- a/tests/test_reaction.py +++ b/tests/test_reaction.py @@ -129,6 +129,8 @@ def test_reaction_equality(self): ], ["H + H + M -> H2 + M", "2H + M -> H2 + M"], ["Kr + hv -> Kr + 2hv", "Kr + hv -> Kr + hv + hv"], + ["Kr + hv -> Kr *", "Kr + hν -> Kr *"], + ["Kr + e- -> Kr- *", "Kr + e -> Kr- *"], ] for r1, r2 in equal: self.assertEqual(Reaction(r1), Reaction(r2)) @@ -186,14 +188,20 @@ def test_reaction_species_map(self): self.assertEqual(r.reactants_text_count_map, {"e-": 2, "C2": 1}) self.assertEqual(r.products_text_count_map, {"C-": 2}) r = Reaction("e- + e- + hv -> ", strict=False) - self.assertEqual(r.reactants_text_count_map, {"e-": 2, "hv": 1}) + self.assertEqual(r.reactants_text_count_map, {"e-": 2, "hν": 1}) self.assertEqual(r.products_text_count_map, {}) r = Reaction("1e- + 1e- + 2hv -> ", strict=False) - self.assertEqual(r.reactants_text_count_map, {"e-": 2, "hv": 2}) + self.assertEqual(r.reactants_text_count_map, {"e-": 2, "hν": 2}) r = Reaction("e- + O2 X(3Σ-g) -> ", strict=False) self.assertEqual(r.reactants_text_count_map, {"e-": 1, "O2 X(3Σ-g)": 1}) r = Reaction("e- + O2 X(3SIGMA-g) -> ", strict=False) - self.assertEqual(r.reactants_text_count_map, {"e-": 1, "O2 X(3SIGMA-g)": 1}) + self.assertEqual(r.reactants_text_count_map, {"e-": 1, "O2 X(3Σ-g)": 1}) + + def test_reaction_with_e(self): + r = Reaction("e + C2 + e -> C- + C-") + self.assertEqual(r.reactants_text_count_map, {"e-": 2, "C2": 1}) + self.assertEqual(r.products_text_count_map, {"C-": 2}) + self.assertEqual(repr(r), "2e- + C2 → C- + C-") if __name__ == "__main__": From 897e1cd65655b7b98bb1927344fd043c463fd620 Mon Sep 17 00:00:00 2001 From: Christian Hill Date: Thu, 3 Feb 2022 11:03:15 +0100 Subject: [PATCH 2/3] Add Gamma to MolecularTermSymbol --- src/pyvalem/states/molecular_term_symbol.py | 12 +++++++++++- tests/test_molecular_term_symbol.py | 12 ++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/pyvalem/states/molecular_term_symbol.py b/src/pyvalem/states/molecular_term_symbol.py index 4ff6983..aa50cac 100644 --- a/src/pyvalem/states/molecular_term_symbol.py +++ b/src/pyvalem/states/molecular_term_symbol.py @@ -39,6 +39,12 @@ "PHI", "PHIg", "PHIu", + "Γ", + "Γg", + "Γu", + "GAMMA", + "GAMMAg", + "GAMMAu", "A", "A'", 'A"', @@ -140,9 +146,13 @@ "PHI": "Φ", "PHIg": "Φg", "PHIu": "Φu", + "GAMMA": "Γ", + "GAMMAg": "Γg", + "GAMMAu": "Γu", } -latex_terms = {"Σ": r"\Sigma", "Π": r"\Pi", "Δ": r"\Delta", "Φ": r"\Phi"} +latex_terms = {"Σ": r"\Sigma", "Π": r"\Pi", "Δ": r"\Delta", "Φ": r"\Phi", + "Γ": r"\Gamma"} integer = pp.Word(pp.nums) molecule_Smult = integer.setResultsName("Smult") diff --git a/tests/test_molecular_term_symbol.py b/tests/test_molecular_term_symbol.py index 62cf5ab..b30489d 100644 --- a/tests/test_molecular_term_symbol.py +++ b/tests/test_molecular_term_symbol.py @@ -72,6 +72,18 @@ def test_greek_letter_conversion(self): self.assertEqual(str(m3), "3Σ+u") self.assertEqual(m3.html, "3Σ+u") + m3 = MolecularTermSymbol("4GAMMA") + self.assertEqual(m3.Smult, 4) + self.assertEqual(m3.irrep, "Γ") + self.assertEqual(str(m3), "4Γ") + self.assertEqual(m3.html, "4Γ") + + m3 = MolecularTermSymbol("2GAMMAg") + self.assertEqual(m3.Smult, 2) + self.assertEqual(m3.irrep, "Γg") + self.assertEqual(str(m3), "2Γg") + self.assertEqual(m3.html, "2Γg") + m3 = MolecularTermSymbol('A(1A")') self.assertEqual(str(m3), 'A(1A")') self.assertEqual(m3.html, 'A1A"') From db0a8b537b9ee88161952999e04e93a887f7f454 Mon Sep 17 00:00:00 2001 From: Christian Hill Date: Thu, 3 Feb 2022 11:25:16 +0100 Subject: [PATCH 3/3] Add GAMMA to MolecularTermSymbol --- src/pyvalem/states/molecular_term_symbol.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pyvalem/states/molecular_term_symbol.py b/src/pyvalem/states/molecular_term_symbol.py index aa50cac..b7ec70b 100644 --- a/src/pyvalem/states/molecular_term_symbol.py +++ b/src/pyvalem/states/molecular_term_symbol.py @@ -151,8 +151,13 @@ "GAMMAu": "Γu", } -latex_terms = {"Σ": r"\Sigma", "Π": r"\Pi", "Δ": r"\Delta", "Φ": r"\Phi", - "Γ": r"\Gamma"} +latex_terms = { + "Σ": r"\Sigma", + "Π": r"\Pi", + "Δ": r"\Delta", + "Φ": r"\Phi", + "Γ": r"\Gamma", +} integer = pp.Word(pp.nums) molecule_Smult = integer.setResultsName("Smult")