From e7f9ccf564ca11fe6c1b4faa3d31464c1fdf1376 Mon Sep 17 00:00:00 2001 From: Christian Hill Date: Mon, 25 Apr 2022 15:15:25 +0200 Subject: [PATCH] Allow molecular term symbol labels 1, 2, 3, etc. --- src/pyvalem/states/molecular_term_symbol.py | 9 ++++++++- tests/test_molecular_term_symbol.py | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/pyvalem/states/molecular_term_symbol.py b/src/pyvalem/states/molecular_term_symbol.py index b7ec70b..e1959f1 100644 --- a/src/pyvalem/states/molecular_term_symbol.py +++ b/src/pyvalem/states/molecular_term_symbol.py @@ -169,9 +169,16 @@ molecule_term = ( molecule_Smult + molecule_irrep + pp.Optional(pp.Suppress("_") + molecule_Omegastr) ) -term_label = pp.Combine( + +# Term Symbol label can be a single letter (perhaps followed by ' or ") ... +term_label_let = pp.Combine( pp.Word(pp.srange("[A-Za-z]")) + pp.Optional(pp.oneOf(("'", '"'))) ).setResultsName("term_label") +# ... or a number. The open bracket is required but suppressed to distinguish +# this type of term label from the spin multiplicity. +term_label_num = integer.setResultsName("term_label") + pp.Suppress("(") +term_label = term_label_let | term_label_num + molecule_term_with_label = ( pp.Optional(term_label) + pp.Suppress(pp.Optional("(")) diff --git a/tests/test_molecular_term_symbol.py b/tests/test_molecular_term_symbol.py index b30489d..ccb85c7 100644 --- a/tests/test_molecular_term_symbol.py +++ b/tests/test_molecular_term_symbol.py @@ -121,6 +121,13 @@ def test_molecular_term_symbol_repr(self): m4 = MolecularTermSymbol("4DELTA") self.assertTrue(repr(m3) == repr(m4) == "4Δ") + def test_term_symbol_label(self): + m1 = MolecularTermSymbol("1(2B1)") + self.assertEqual(repr(m1), "1(2B1)") + self.assertEqual(m1.term_label, "1") + self.assertRaises(MolecularTermSymbolError, MolecularTermSymbol, "1'(A\")") + self.assertRaises(MolecularTermSymbolError, MolecularTermSymbol, '-2(A")') + if __name__ == "__main__": unittest.main()