mmikhasenko / ThreeBodyDecays.jl

Builder of the three-body decay model using cascade approach
https://mmikhasenko.github.io/ThreeBodyDecays.jl/
MIT License
2 stars 0 forks source link

Relation to different conventions #49

Open mmikhasenko opened 2 weeks ago

mmikhasenko commented 2 weeks ago

Description

Dependence on the overall rotation is given by D* O * phase where the overall phase depends on the convention that is used.

It would be nice adding a way to call amplitude with an overall rotation, and be able to choose a convention

Validation and testing

# ╔═╡ 4381044c-c48b-4ec5-a366-2f5f3c743a72
function amplitude_3d_dpd(model, angles, pars...; kw...) 
    @unpack k, tbs, two_j = model.chains[1]
    ms² = tbs.ms^2
    two_js = tbs.two_js
    two_j0 = two_js[4]

    F0 = amplitude(model, pars...; kw...)

    # alignment rotations
    D0 = conj.(wignerD_doublearg(two_j0, angles...))
    #
    F = similar(F0)
    @tullio F[_i, _j, _k, _z] =
        D0[_z, _z′] * F0[_i, _j, _k, _z′]
    # 
    return F
end

# ╔═╡ 8765c0f2-6195-41ae-bf05-8562c536f26b
function amplitude_3d_helicity(model, angles, pars...; refζk, kw...) 
    # 
    ϕ, cosθ, ψ = angles
    two_jk = two_js[refζk]
    phase = map(Iterators.product(
        -two_js[1]:2:two_js[1],
        -two_js[2]:2:two_js[2],
        -two_js[3]:2:two_js[3])) do two_λs
        cis(ψ * two_λs[refζk] / 2)
    end

    refζs=fill(refζk, 4)
    F0 = amplitude_3d_dpd(model, angles, pars...; refζs, kw...) 
    # 
    F = similar(F0)
    @tullio F[_i, _j, _k, _z] = phase[_i, _j, _k] * F0[_i, _j, _k, _z]
    return F
end

# ╔═╡ 3ad31c79-a853-4a4a-9a4d-0b3bcd3c78be
function amplitude_3d_minusphi(model, angles, pars...; refζk, kw...) 
    refζi, refζj = ij_from_k(refζk)
    # 
    ϕ, cosθ, ψ = angles
    two_jk = two_js[refζk]

    ψ′ = ϕ + ψ
    phase = map(Iterators.product(
        -two_js[1]:2:two_js[1],
        -two_js[2]:2:two_js[2],
        -two_js[3]:2:two_js[3])) do two_λs
        cis(ψ′ * (two_λs[refζk]-two_λs[refζi]+two_λs[refζj]) / 2)
    end
    refζs=fill(refζk, 4)
    F0 = amplitude_3d_dpd(model, angles, pars...; refζs, kw...) 
    # 
    F = similar(F0)
    @tullio F[_i, _j, _k, _z] = phase[_i, _j, _k] * F0[_i, _j, _k, _z]
    return F
end

Motivation

No response

Target audience

No response

Can you help?

No response