diff options
author | Thomas White <taw@physics.org> | 2024-01-21 11:21:11 +0100 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2024-02-06 16:59:35 +0100 |
commit | 24e81e00a1c36863b7e0f649bf7b3ec6ad3eb3c8 (patch) | |
tree | 1e178c7534d29dcbb3a28cd2144e90cfa511d78d /julia | |
parent | 03612564815811e495a6b6a595defc834cd310e9 (diff) |
Julia: Crystal: Improve show method, add accessors
I'm not sure about these field names, yet.
Diffstat (limited to 'julia')
-rw-r--r-- | julia/CrystFEL/src/crystal.jl | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/julia/CrystFEL/src/crystal.jl b/julia/CrystFEL/src/crystal.jl index 75124789..89aaf0fe 100644 --- a/julia/CrystFEL/src/crystal.jl +++ b/julia/CrystFEL/src/crystal.jl @@ -1,5 +1,7 @@ module Crystals +using Printf + import ..CrystFEL: libcrystfel import ..CrystFEL.RefLists: RefList, InternalRefList, UnmergedReflection import ..CrystFEL.UnitCells: UnitCell, InternalUnitCell @@ -86,20 +88,44 @@ function Base.getproperty(cr::Crystal, name::Symbol) getfield(cr, :internalptr) elseif name === :cell return getcell(cr) + elseif name === :Bfac + return @ccall libcrystfel.crystal_get_Bfac(cr.internalptr::Ptr{InternalCrystal})::Cdouble + elseif name === :osf + return @ccall libcrystfel.crystal_get_osf(cr.internalptr::Ptr{InternalCrystal})::Cdouble + elseif name === :mos + return @ccall libcrystfel.crystal_get_mosaicity(cr.internalptr::Ptr{InternalCrystal})::Cdouble + elseif name === :r + return @ccall libcrystfel.crystal_get_profile_radius(cr.internalptr::Ptr{InternalCrystal})::Cdouble + elseif name === :resolution + return @ccall libcrystfel.crystal_get_resolution_limit(cr.internalptr::Ptr{InternalCrystal})::Cdouble + elseif name === :flag + return @ccall libcrystfel.crystal_get_user_flag(cr.internalptr::Ptr{InternalCrystal})::Cint else throw(ErrorException("Type Crystal has no field "*String(name))) end end -function Base.show(io::IO, cr::Crystal) - write(io, "Crystal(") +function Base.show(io::IO, mime::MIME"text/plain", cr::Crystal) + @printf(io, "CrystFEL.Crystal(%p):\n\n", cr.internalptr) if cr.cell !== nothing show(io, cr.cell) + write(io, "\n\n") else - write(io, "no cell") + write(io, "Unit cell parameters not set\n\n") end - write(io, ")") + println(io, " Linear scale factor: ", cr.osf) + println(io, " Debye-Walle factor: ", cr.Bfac) + println(io, " Mosaicity: ", cr.mos) + println(io, " Profile radius: ", cr.r/1e9, " nm⁻¹") + println(io, " Resolution limit: ", cr.resolution) + println(io, " Flag: ", cr.flag) end + +function Base.show(io::IO, cr::Crystal) + @printf(io, "CrystFEL.Crystal(%p)", cr.internalptr) +end + + end # of module |