diff options
author | Thomas White <taw@physics.org> | 2024-01-18 17:25:20 +0100 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2024-02-06 16:59:35 +0100 |
commit | ff89f33377133352838f27057525701e71c9df7c (patch) | |
tree | 3a06ec063c5c2a6a3b28d31a2ea8c7738ecbe65a /julia | |
parent | dd6aed228f47eb6bfc713b20e635e2bacfe1a6f9 (diff) |
Julia: Expose crystals and reflection lists from image
The memory management isn't quite right here yet.
Diffstat (limited to 'julia')
-rw-r--r-- | julia/CrystFEL/src/crystal.jl | 9 | ||||
-rw-r--r-- | julia/CrystFEL/src/image.jl | 23 | ||||
-rw-r--r-- | julia/CrystFEL/src/reflists.jl | 1 |
3 files changed, 23 insertions, 10 deletions
diff --git a/julia/CrystFEL/src/crystal.jl b/julia/CrystFEL/src/crystal.jl index 129c028c..eba7a615 100644 --- a/julia/CrystFEL/src/crystal.jl +++ b/julia/CrystFEL/src/crystal.jl @@ -10,7 +10,6 @@ mutable struct InternalCrystal end mutable struct Crystal internalptr::Ptr{InternalCrystal} - in_image # if true, this PeakList belongs to an Image struct end @@ -40,13 +39,11 @@ function Crystal(cell::UnitCell; profileradius=2e6, mosaicity=0) Cvoid, (Ptr{InternalCrystal},Cdouble), out, mosaicity) - cr = Crystal(out, false) + cr = Crystal(out) finalizer(cr) do x - if !x.in_image - ccall((:crystal_free, libcrystfel), Cvoid, (Ptr{InternalCrystal},), - x.internalptr) - end + ccall((:crystal_free, libcrystfel), Cvoid, (Ptr{InternalCrystal},), + x.internalptr) end return cr diff --git a/julia/CrystFEL/src/image.jl b/julia/CrystFEL/src/image.jl index de79a556..a9d9c28f 100644 --- a/julia/CrystFEL/src/image.jl +++ b/julia/CrystFEL/src/image.jl @@ -5,16 +5,23 @@ import ..CrystFEL.DataTemplates: DataTemplate, InternalDataTemplate import ..CrystFEL.DetGeoms: DetGeom import ..CrystFEL.PeakLists: PeakList, InternalPeakList import ..CrystFEL.Crystals: Crystal, InternalCrystal +import ..CrystFEL.RefLists: RefList, InternalRefList, UnmergedReflection +import ..CrystFEL.Symmetry: SymOpList export Image const HEADER_CACHE_SIZE = 128 +mutable struct CrystalRefListPair + crystal::Ptr{InternalCrystal} + reflist::Ptr{InternalRefList} +end + mutable struct InternalImage dp::Ptr{Ptr{Cfloat}} bad::Ptr{Ptr{Cint}} sat::Ptr{Ptr{Cfloat}} hit::Cint - crystals::Ptr{Ptr{Cvoid}} + crystals::Ptr{CrystalRefListPair} n_crystals::Cint indexed_by::Cint n_indexing_tries::Cint @@ -43,20 +50,28 @@ end mutable struct Image internalptr::Ptr{InternalImage} peaklist::Union{Nothing,PeakList} + crystals + reflists end function makecrystallist(listptr, n) - crystals = Crystal[] + crystals = [] if listptr == C_NULL return crystals end for i in 1:n - crystalptr = unsafe_load(listptr, i) - push!(crystals, Crystal(crystalptr, true)) + pairptr = unsafe_load(listptr, i) + cr = Crystal(pairptr.crystal) + if pairptr.reflist == C_NULL + reflist = nothing + else + reflist = RefList{UnmergedReflection}(pairptr.reflist, SymOpList("1")) + end + push!(crystals, (crystal=cr, reflections=reflist)) end crystals diff --git a/julia/CrystFEL/src/reflists.jl b/julia/CrystFEL/src/reflists.jl index 007f0f07..d6b3a951 100644 --- a/julia/CrystFEL/src/reflists.jl +++ b/julia/CrystFEL/src/reflists.jl @@ -5,6 +5,7 @@ import ..CrystFEL: libcrystfel import ..CrystFEL.Symmetry: SymOpList, InternalSymOpList, symmetry_name export RefList, loadreflist export Reflection, UnmergedReflection, MergedReflection +export InternalRefList # The internal libcrystfel structures, not exposed directly |