Age | Commit message (Collapse) | Author | |
---|---|---|---|
2024-02-06 | Julia: Forbid non-deep copying of a PeakList | Thomas White | |
We cannot have two PeakList objects pointing at the same underlying ImageFeatureList. | |||
2024-02-06 | Julia: Image/PeakList memory semantics (again) | Thomas White | |
Previous commit a6462e1f0 was still not right. If the image gets freed, the PeakList can be left with a dangling reference. If the peak list gets replaced at the C level (e.g. by running a new peak search), Julia will have no way of knowing about it. Instead of having the PeakList know if it's associated with an image, it's better to have the Image know (at the C level) if it's responsible for freeing the ImageFeatureList. As soon as the ImageFeatureList is exposed to the Julia GC via a PeakList object, it becomes Julia's responsibility to free it. The Julia Image structure contains a reference to the Julia PeakList, to prevent this from happening until either the image is freed or a new PeakList is substituted. The two references (Julia image.peaklist and C image->features) have to be kept in sync, and we check image->features every time the peaklist is requested. | |||
2024-02-06 | Julia: Make a copy of the cell when creating a Crystal | Thomas White | |
We could do some more reference tracking stuff here, but it seems a little excessive. | |||
2024-02-06 | Julia: fix Image/PeakList memory semantics | Thomas White | |
The previous commit 3bb46f49 was a mistake. We can't just free the old peak list, because there might still be a PeakList object around that refers to it. This new version keeps a record of the PeakList object itself, setting in_image=false if a new list is added, so that it can be freed by the GC. I made an attempt at making this thread-safe, but I think it's impossible to get it completely correct. One should simply avoid setting any Image fields in the same structure from different threads. | |||
2024-02-06 | Julia: Free old peak list on re-assignment | Thomas White | |
2024-02-06 | Update docs | Thomas White | |
2024-02-06 | Update docs | Thomas White | |
2024-02-06 | Julia: set filename and event ID for image | Thomas White | |
2024-02-06 | Update julia/partial_sim.jl | Thomas White | |
2024-02-06 | Julia: Write the DataTemplate to the stream | Thomas White | |
2024-02-06 | Julia: Add catch-all setproperty for image | Thomas White | |
This allows e.g. image.serial to be set. | |||
2024-02-06 | Julia: Implement setting of cr.reflections | Thomas White | |
2024-02-06 | Julia: Allow access to image.crystals | Thomas White | |
image.crystals returns a vector of Crystal objects, while push!(image,crystal) can be used to add a new crystal. | |||
2024-02-06 | Formatting | Thomas White | |
2024-02-06 | Julia: Add example (partial_sim in Julia) | Thomas White | |
2024-02-06 | Julia: Add chunkwrite() | Thomas White | |
2024-02-06 | Julia: Add some docstrings | Thomas White | |
2024-02-06 | Julia: Stream semantics | Thomas White | |
2024-02-06 | Add missing millepede.jl | Thomas White | |
2024-02-06 | Add plot routine for alignment test | Thomas White | |
2024-02-06 | Reduce number of simulation runs and add some output | Thomas White | |
2024-02-06 | Julia: Add Millepede output | Thomas White | |
2024-02-06 | Julia: Add cell rotation | Thomas White | |
2024-02-06 | Julia: Stream opening | Thomas White | |
2024-02-06 | Detector alignment simulation (WIP) | Thomas White | |
2024-02-06 | Prevent adding a PeakList to two different images | Thomas White | |
This is kind-of-OK in C, but will break Julia's memory management. | |||
2024-02-06 | Stub documentation for Julia bindings | Thomas White | |
2024-02-06 | Julia: CrystFEL.Indexing.Indexer: Fix tolerance parameter | Thomas White | |
2024-02-06 | Update alignment-test.jl | Thomas White | |
2024-02-06 | PeakList: Handle zero-length lists better | Thomas White | |
2024-02-06 | Julia: Set profile radius and mosaicity for Crystal | Thomas White | |
2024-02-06 | Use wavelength and clen from DataTemplate if possible | Thomas White | |
2024-02-06 | Julia: Run the indexer pipeline | Thomas White | |
2024-02-06 | Julia: Implement indexing flags | Thomas White | |
2024-02-06 | Update alignment-test.jl | Thomas White | |
2024-02-06 | Julia: initial indexing framework | Thomas White | |
2024-02-06 | Show method for PeakList | Thomas White | |
2024-02-06 | Setters for image struct | Thomas White | |
2024-02-06 | Julia: Avoid segfault if image doesn't have a peak list | Thomas White | |
2024-02-06 | Julia: Implement PeakList | Thomas White | |
2024-02-06 | Julia: Remove AbstractArray bits from RefList | Thomas White | |
2024-02-06 | Add sigI and nmeas to show(::RefList{MergedReflection}) | Thomas White | |
2024-02-06 | Julia: display methods for RefList{UnmergedReflection} | Thomas White | |
2024-02-06 | Julia: add initial Crystal type and reflection prediction | Thomas White | |
2024-02-06 | Update alignment-test.jl | Thomas White | |
2024-02-06 | Julia: Distinguish between merged and unmerged reflections | Thomas White | |
An experiment. The C interface doesn't have this distinction, but it seems like it might be helpful. | |||
2024-02-06 | RefList indexing details | Thomas White | |
RefLists are a bit strange. They're logically Cartesian arrays with 3 indexes, but they're not really designed for indexing in this way. Rather, we always want to index them linearly, from start to finish. | |||
2024-02-06 | Julia: Remove explicit reflections() iterator creation | Thomas White | |
This appears not to be necessary. I'd just got my thoughts into a twist. Either that, or I've forgotten the reason why this doesn't work. Let's see... | |||
2024-02-06 | Add Manifest.toml | Thomas White | |
2024-02-06 | Julia: RefList: basic subscripting | Thomas White | |