Basis states and GT patterns

GT patterns are the basis states used by GroupFunctions.jl.

Build one directly

julia> using GroupFunctions
julia> gt = GTPattern([[2, 1, 0], [2, 1], [2]]);
julia> gt│ 2 1 0 ╲ │ 2 1 〉 │ 2 ╱

Generate all patterns in an irrep

julia> using GroupFunctions
julia> λ = [2, 1, 0];
julia> basis = basis_states(λ);
julia> length(basis)8
julia> basis[1]│ 2 1 0 ╲ │ 1 0 〉 │ 0 ╱
julia> basis[2]│ 2 1 0 ╲ │ 1 0 〉 │ 1 ╱
julia> basis[3]│ 2 1 0 ╲ │ 1 1 〉 │ 1 ╱

Read the weights

julia> using GroupFunctions
julia> gt = basis_states([2, 1, 0])[1];
julia> pweight(gt)3-element Vector{Int64}: 2 1 0
julia> zweight(gt)2-element Vector{Float64}: -0.5 -0.5

Bosonic occupation numbers

For symmetric irreps, pweight is the occupation vector.

julia> using GroupFunctions
julia> λ = [2, 0, 0];
julia> basis = basis_states(λ);
julia> foreach(gt -> println(pweight(gt)), basis)[2, 0, 0] [1, 1, 0] [1, 0, 1] [0, 2, 0] [0, 1, 1] [0, 0, 2]

Step to the next pattern

julia> using GroupFunctions
julia> gt = GTPattern([[2, 1, 0], [2, 1], [2]]);
julia> determine_next_pattern(gt)

Pick states for a group-function calculation

julia> using GroupFunctions
julia> using LinearAlgebra: I
julia> λ = [2, 0, 0];
julia> basis = basis_states(λ);
julia> initial = basis[findfirst(gt -> pweight(gt) == [1, 1, 0], basis)];
julia> final = basis[findfirst(gt -> pweight(gt) == [2, 0, 0], basis)];
julia> U = Matrix{ComplexF64}(I, 3, 3);
julia> group_function(λ, final, initial, U)0.0 + 0.0im

Next: group functions.