aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2024-01-21 11:21:11 +0100
committerThomas White <taw@physics.org>2024-02-06 16:59:35 +0100
commit24e81e00a1c36863b7e0f649bf7b3ec6ad3eb3c8 (patch)
tree1e178c7534d29dcbb3a28cd2144e90cfa511d78d
parent03612564815811e495a6b6a595defc834cd310e9 (diff)
Julia: Crystal: Improve show method, add accessors
I'm not sure about these field names, yet.
-rw-r--r--julia/CrystFEL/src/crystal.jl34
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