Skip to content

Commit 71a3954

Browse files
add angular.jl
1 parent f596217 commit 71a3954

3 files changed

Lines changed: 112 additions & 13 deletions

File tree

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ LoggingExtras = "e6f89c97-d47a-5376-807f-9c37f3926c36"
88
MQDT = "1bfeae05-7215-4237-8fdd-b424babe7f02"
99
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
1010
Parquet2 = "98572fba-bba0-415d-956f-fa77e587d26d"
11+
PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d"
1112
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"

angular.jl

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
using PythonCall
2+
using MQDT
3+
4+
function calc_exp_qn(basisstate::BasisState, qn::String)
5+
state = get_state(basisstate)
6+
value = state.calc_exp_qn(qn)
7+
return pyconvert(Float64, value)
8+
end
9+
10+
function calc_exp_qn(basisarray::BasisArray, qn::String)
11+
exp_list = Vector{Float64}(undef, size(basisarray))
12+
for (i, state) in enumerate(basisarray.states)
13+
exp_list[i] = calc_exp_qn(state, qn)
14+
end
15+
return exp_list
16+
end
17+
18+
function calc_std_qn(basisstate::BasisState, qn::String)
19+
state = get_state(basisstate)
20+
value = state.calc_std_qn(qn)
21+
return pyconvert(Float64, value)
22+
end
23+
24+
function calc_std_qn(basisarray::BasisArray, qn::String)
25+
std_list = Vector{Float64}(undef, size(basisarray))
26+
for (i, state) in enumerate(basisarray.states)
27+
std_list[i] = calc_std_qn(state, qn)
28+
end
29+
return std_list
30+
end
31+
32+
function get_state(basisstate::BasisState)
33+
rydstate = pyimport("rydstate")
34+
channels = basisstate.channels.i
35+
kets = Vector{Any}(undef, size(channels))
36+
for i in eachindex(channels)
37+
qn = channels[i]
38+
kets[i] = get_ket(qn, basisstate.species)
39+
end
40+
state = rydstate.angular.AngularState(basisstate.coeff, kets; warn_if_not_normalized = false)
41+
return state
42+
end
43+
44+
function get_ket(qn::lsQuantumNumbers, species::Symbol)
45+
rydstate = pyimport("rydstate")
46+
ket = rydstate.angular.AngularKetLS(;
47+
s_c = qn.sc,
48+
s_tot = qn.S,
49+
l_c = qn.lc,
50+
l_r = qn.lr,
51+
l_tot = qn.L,
52+
j_tot = qn.J,
53+
f_tot = qn.F,
54+
species = String(species),
55+
)
56+
return ket
57+
end
58+
59+
function get_ket(qn::jjQuantumNumbers, species::Symbol)
60+
rydstate = pyimport("rydstate")
61+
ket = rydstate.angular.AngularKetJJ(;
62+
s_c = qn.sc,
63+
l_c = qn.lc,
64+
l_r = qn.lr,
65+
j_c = qn.Jc,
66+
j_r = qn.Jr,
67+
j_tot = qn.J,
68+
f_tot = qn.F,
69+
species = String(species),
70+
)
71+
return ket
72+
end
73+
74+
function get_ket(qn::fjQuantumNumbers, species::Symbol)
75+
rydstate = pyimport("rydstate")
76+
ket = rydstate.angular.AngularKetFJ(;
77+
s_c = qn.sc,
78+
l_c = qn.lc,
79+
l_r = qn.lr,
80+
j_c = qn.Jc,
81+
f_c = qn.Fc,
82+
j_r = qn.Jr,
83+
f_tot = qn.F,
84+
species = String(species),
85+
)
86+
return ket
87+
end

utils.jl

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import MQDT
2+
include("angular.jl")
3+
24

35
const START_ID = 0
46

@@ -12,7 +14,7 @@ macro timelog(expr)
1214
end
1315

1416

15-
function all_matrix_element(B::BasisArray, parameters::MQDT.Parameters)
17+
function all_matrix_element(B::MQDT.BasisArray, parameters::MQDT.Parameters)
1618
"""Calculate all relevant matrix elements for a given basis array B.
1719
1820
This means dipole, quadrupole, magnetic, and diamagnetic matrix elements.
@@ -81,26 +83,35 @@ function rcv_to_df(row_col_value::Vector{Tuple{Int64,Int64,Float64}})
8183
return df
8284
end
8385

84-
function basis_to_df(T::BasisArray, P::Parameters)
86+
87+
function get_n(T::MQDT.BasisArray)
88+
# TODO for now just return round(nu)
89+
# later calculate radial overlap with different sqdt states and take the corresponding n
90+
nu = MQDT.get_nu(T)
91+
return round.(Int, nu)
92+
end
93+
94+
95+
function basis_to_df(T::MQDT.BasisArray, P::MQDT.Parameters)
8596
df = DataFrame(
8697
id = collect(START_ID:(size(T)-1+START_ID)),
8798
energy = MQDT.get_e(T, P) / 219474.6313632, # convert 1/cm to atomic units
8899
parity = MQDT.get_p(T),
89-
n = MQDT.get_n(T, P),
100+
n = get_n(T),
90101
nu = MQDT.get_nu(T),
91102
f = MQDT.get_f(T),
92103
exp_nui = MQDT.exp_nui(T),
93-
exp_l = MQDT.calc_exp_qn(T, "l_tot"),
94-
exp_j = MQDT.calc_exp_qn(T, "j_tot"),
95-
exp_s = MQDT.calc_exp_qn(T, "s_tot"),
96-
exp_l_ryd = MQDT.calc_exp_qn(T, "l_r"),
97-
exp_j_ryd = MQDT.calc_exp_qn(T, "j_r"),
104+
exp_l = calc_exp_qn(T, "l_tot"),
105+
exp_j = calc_exp_qn(T, "j_tot"),
106+
exp_s = calc_exp_qn(T, "s_tot"),
107+
exp_l_ryd = calc_exp_qn(T, "l_r"),
108+
exp_j_ryd = calc_exp_qn(T, "j_r"),
98109
std_nui = MQDT.std_nui(T),
99-
std_l = MQDT.calc_std_qn(T, "l_tot"),
100-
std_j = MQDT.calc_std_qn(T, "j_tot"),
101-
std_s = MQDT.calc_std_qn(T, "s_tot"),
102-
std_l_ryd = MQDT.calc_std_qn(T, "l_r"),
103-
std_j_ryd = MQDT.calc_std_qn(T, "j_r"),
110+
std_l = calc_std_qn(T, "l_tot"),
111+
std_j = calc_std_qn(T, "j_tot"),
112+
std_s = calc_std_qn(T, "s_tot"),
113+
std_l_ryd = calc_std_qn(T, "l_r"),
114+
std_j_ryd = calc_std_qn(T, "j_r"),
104115
is_j_total_momentum = MQDT.is_J(T, P),
105116
is_calculated_with_mqdt = MQDT.is_mqdt(T),
106117
underspecified_channel_contribution = MQDT.get_neg(T),

0 commit comments

Comments
 (0)