diff --git a/image_analysis/CMakeLists.txt b/image_analysis/CMakeLists.txt index 517305c58..098307e75 100644 --- a/image_analysis/CMakeLists.txt +++ b/image_analysis/CMakeLists.txt @@ -129,5 +129,6 @@ ADD_SUBDIRECTORY(scale_merge) ADD_SUBDIRECTORY(image_preprocessing) ADD_SUBDIRECTORY(azint) ADD_SUBDIRECTORY(roi) +ADD_SUBDIRECTORY(structure_refinement) -TARGET_LINK_LIBRARIES(JFJochImageAnalysis JFJochAzIntEngine JFJochROIIntegration JFJochImagePreprocessing JFJochBraggPrediction JFJochBraggIntegration JFJochLatticeSearch JFJochIndexing JFJochSpotFinding JFJochCommon JFJochGeomRefinement JFJochScaleMerge gemmi) +TARGET_LINK_LIBRARIES(JFJochImageAnalysis JFJochAzIntEngine JFJochROIIntegration JFJochImagePreprocessing JFJochBraggPrediction JFJochBraggIntegration JFJochLatticeSearch JFJochIndexing JFJochSpotFinding JFJochCommon JFJochGeomRefinement JFJochScaleMerge JFJochStructureRefinement gemmi) diff --git a/image_analysis/structure_refinement/CMakeLists.txt b/image_analysis/structure_refinement/CMakeLists.txt new file mode 100644 index 000000000..34c5ac3e1 --- /dev/null +++ b/image_analysis/structure_refinement/CMakeLists.txt @@ -0,0 +1,16 @@ +ADD_LIBRARY(JFJochStructureRefinement STATIC + ModelFFT.cpp ModelFFT.h + ModelGrid.cpp ModelGrid.h + ModelScaling.cpp ModelScaling.h + ModelValidation.cpp ModelValidation.h + RigidBodyRefine.cpp RigidBodyRefine.h + $<$:RigidBodyGPU.cpp> + $<$:RigidBodyGPU.cu> + RigidBodyGPU.h RigidBodyGPUEngine.h + $<$:ModelMaskGPU.cu> ModelMaskGPU.h + $<$:ModelScaleGPU.cu> ModelScaleGPU.h + SigmaA.cpp SigmaA.h) + +# JFJochIndexing for CUDAMemHelpers.h and, under CUDA, to put cuFFT (RigidBodyGPU.cu) after these +# objects on the link line. +TARGET_LINK_LIBRARIES(JFJochStructureRefinement JFJochScaleMerge JFJochIndexing JFJochCommon gemmi fftw3f) diff --git a/rugnux/ModelFFT.cpp b/image_analysis/structure_refinement/ModelFFT.cpp similarity index 99% rename from rugnux/ModelFFT.cpp rename to image_analysis/structure_refinement/ModelFFT.cpp index a70c4fb88..ff5c43ef6 100644 --- a/rugnux/ModelFFT.cpp +++ b/image_analysis/structure_refinement/ModelFFT.cpp @@ -14,7 +14,7 @@ #include "gemmi/fail.hpp" -#include "../common/FFTWPlannerLock.h" +#include "../../common/FFTWPlannerLock.h" namespace { diff --git a/rugnux/ModelFFT.h b/image_analysis/structure_refinement/ModelFFT.h similarity index 100% rename from rugnux/ModelFFT.h rename to image_analysis/structure_refinement/ModelFFT.h diff --git a/rugnux/ModelGrid.cpp b/image_analysis/structure_refinement/ModelGrid.cpp similarity index 99% rename from rugnux/ModelGrid.cpp rename to image_analysis/structure_refinement/ModelGrid.cpp index 65eb64c39..9323a2cfe 100644 --- a/rugnux/ModelGrid.cpp +++ b/image_analysis/structure_refinement/ModelGrid.cpp @@ -10,7 +10,7 @@ #include "gemmi/solmask.hpp" // SolventMasker -#include "../common/ParallelFor.h" +#include "../../common/ParallelFor.h" namespace { diff --git a/rugnux/ModelGrid.h b/image_analysis/structure_refinement/ModelGrid.h similarity index 100% rename from rugnux/ModelGrid.h rename to image_analysis/structure_refinement/ModelGrid.h diff --git a/rugnux/ModelMaskGPU.cu b/image_analysis/structure_refinement/ModelMaskGPU.cu similarity index 99% rename from rugnux/ModelMaskGPU.cu rename to image_analysis/structure_refinement/ModelMaskGPU.cu index e1cf91466..5a2db4b21 100644 --- a/rugnux/ModelMaskGPU.cu +++ b/image_analysis/structure_refinement/ModelMaskGPU.cu @@ -7,7 +7,7 @@ #include #include -#include "../common/JFJochException.h" +#include "../../common/JFJochException.h" namespace { diff --git a/rugnux/ModelMaskGPU.h b/image_analysis/structure_refinement/ModelMaskGPU.h similarity index 98% rename from rugnux/ModelMaskGPU.h rename to image_analysis/structure_refinement/ModelMaskGPU.h index c7210d9a8..9f821bfb5 100644 --- a/rugnux/ModelMaskGPU.h +++ b/image_analysis/structure_refinement/ModelMaskGPU.h @@ -8,7 +8,7 @@ #include -#include "../image_analysis/indexing/CUDAMemHelpers.h" +#include "../indexing/CUDAMemHelpers.h" // The bulk-solvent mask of PutMaskOnGrid() (ModelGrid.h), i.e. gemmi's // SolventMasker(AtomicRadiiSet::Refmac).put_mask_on_grid(), on the GPU. gemmi masks the atoms and then diff --git a/rugnux/ModelScaleGPU.cu b/image_analysis/structure_refinement/ModelScaleGPU.cu similarity index 99% rename from rugnux/ModelScaleGPU.cu rename to image_analysis/structure_refinement/ModelScaleGPU.cu index 13ba604ec..c5f7d054b 100644 --- a/rugnux/ModelScaleGPU.cu +++ b/image_analysis/structure_refinement/ModelScaleGPU.cu @@ -9,7 +9,7 @@ #include #include -#include "../common/JFJochException.h" +#include "../../common/JFJochException.h" #include "RigidBodyGPUEngine.h" // ModelScaleGPUTooFewReflections namespace { diff --git a/rugnux/ModelScaleGPU.h b/image_analysis/structure_refinement/ModelScaleGPU.h similarity index 98% rename from rugnux/ModelScaleGPU.h rename to image_analysis/structure_refinement/ModelScaleGPU.h index a850e7e06..f0f4bd7bc 100644 --- a/rugnux/ModelScaleGPU.h +++ b/image_analysis/structure_refinement/ModelScaleGPU.h @@ -9,7 +9,7 @@ #include -#include "../image_analysis/indexing/CUDAMemHelpers.h" +#include "../indexing/CUDAMemHelpers.h" // The rigid body's scale fit on the GPU: what RigidBodyTarget::Residuals does with a gemmi // Scaling (use_solvent, k_sol and b_sol fixed) - fit_isotropic_b_approximately() followed by diff --git a/rugnux/ModelScaling.cpp b/image_analysis/structure_refinement/ModelScaling.cpp similarity index 99% rename from rugnux/ModelScaling.cpp rename to image_analysis/structure_refinement/ModelScaling.cpp index e0c64e626..4fa5aee59 100644 --- a/rugnux/ModelScaling.cpp +++ b/image_analysis/structure_refinement/ModelScaling.cpp @@ -7,7 +7,7 @@ #include #include -#include "../common/ParallelFor.h" +#include "../../common/ParallelFor.h" namespace { diff --git a/rugnux/ModelScaling.h b/image_analysis/structure_refinement/ModelScaling.h similarity index 100% rename from rugnux/ModelScaling.h rename to image_analysis/structure_refinement/ModelScaling.h diff --git a/rugnux/ModelValidation.cpp b/image_analysis/structure_refinement/ModelValidation.cpp similarity index 99% rename from rugnux/ModelValidation.cpp rename to image_analysis/structure_refinement/ModelValidation.cpp index c5b370888..f7cf29601 100644 --- a/rugnux/ModelValidation.cpp +++ b/image_analysis/structure_refinement/ModelValidation.cpp @@ -29,17 +29,17 @@ #include // Ccp4 map I/O #include // Mtz (map-coefficient output) -#include "../common/CorrelationCoefficient.h" -#include "../common/JFJochMath.h" // PI (M_PI is not standard, and MSVC does not define it) -#include "../common/Logger.h" -#include "../image_analysis/scale_merge/ReindexAmbiguity.h" // ReindexReflections -#include "../image_analysis/scale_merge/CrystalSetting.h" // CellMappingOperators +#include "../../common/CorrelationCoefficient.h" +#include "../../common/JFJochMath.h" // PI (M_PI is not standard, and MSVC does not define it) +#include "../../common/Logger.h" +#include "../scale_merge/ReindexAmbiguity.h" // ReindexReflections +#include "../scale_merge/CrystalSetting.h" // CellMappingOperators #include "ModelFFT.h" #include "RigidBodyRefine.h" #include "SigmaA.h" #ifdef JFJOCH_USE_CUDA #include "RigidBodyGPU.h" -#include "../common/CUDAWrapper.h" +#include "../../common/CUDAWrapper.h" #endif namespace { diff --git a/rugnux/ModelValidation.h b/image_analysis/structure_refinement/ModelValidation.h similarity index 99% rename from rugnux/ModelValidation.h rename to image_analysis/structure_refinement/ModelValidation.h index 1198ccaa2..47bffdd26 100644 --- a/rugnux/ModelValidation.h +++ b/image_analysis/structure_refinement/ModelValidation.h @@ -11,8 +11,8 @@ #include "gemmi/symmetry.hpp" -#include "../common/Reflection.h" // MergedReflection -#include "../common/UnitCell.h" +#include "../../common/Reflection.h" // MergedReflection +#include "../../common/UnitCell.h" class Logger; namespace gemmi { struct Structure; } @@ -185,7 +185,7 @@ struct ModelValidationResult { // The model as it was scored: re-fractionalized into the data cell and moved by the rigid-body // step, everything else exactly as it was read. Null where the validation did not run. The frame // it is written in is only settled by AdoptModelFrame below, so it is the caller that puts it on - // disk, with WritePlacedModel (WriteModel.h). + // disk, with WritePlacedModel (writer/WriteModel.h). std::shared_ptr placed_model; }; diff --git a/rugnux/RigidBodyGPU.cpp b/image_analysis/structure_refinement/RigidBodyGPU.cpp similarity index 99% rename from rugnux/RigidBodyGPU.cpp rename to image_analysis/structure_refinement/RigidBodyGPU.cpp index b961107c7..e6d4cddcc 100644 --- a/rugnux/RigidBodyGPU.cpp +++ b/image_analysis/structure_refinement/RigidBodyGPU.cpp @@ -16,9 +16,9 @@ #include "ModelScaling.h" // FitModelScale #include "RigidBodyGPUEngine.h" -#include "../common/CUDAWrapper.h" -#include "../common/JFJochException.h" -#include "../common/Logger.h" +#include "../../common/CUDAWrapper.h" +#include "../../common/JFJochException.h" +#include "../../common/Logger.h" namespace { diff --git a/rugnux/RigidBodyGPU.cu b/image_analysis/structure_refinement/RigidBodyGPU.cu similarity index 99% rename from rugnux/RigidBodyGPU.cu rename to image_analysis/structure_refinement/RigidBodyGPU.cu index 695231527..60ee20193 100644 --- a/rugnux/RigidBodyGPU.cu +++ b/image_analysis/structure_refinement/RigidBodyGPU.cu @@ -13,8 +13,8 @@ #include "ModelMaskGPU.h" #include "ModelScaleGPU.h" -#include "../common/JFJochException.h" -#include "../image_analysis/indexing/CUDAMemHelpers.h" +#include "../../common/JFJochException.h" +#include "../indexing/CUDAMemHelpers.h" // Every kernel below is deterministic: nothing is summed with a floating-point atomic, each grid point // adds its atoms in model order, and every reduction runs in a fixed order. The same placement gives the diff --git a/rugnux/RigidBodyGPU.h b/image_analysis/structure_refinement/RigidBodyGPU.h similarity index 100% rename from rugnux/RigidBodyGPU.h rename to image_analysis/structure_refinement/RigidBodyGPU.h diff --git a/rugnux/RigidBodyGPUEngine.h b/image_analysis/structure_refinement/RigidBodyGPUEngine.h similarity index 100% rename from rugnux/RigidBodyGPUEngine.h rename to image_analysis/structure_refinement/RigidBodyGPUEngine.h diff --git a/rugnux/RigidBodyRefine.cpp b/image_analysis/structure_refinement/RigidBodyRefine.cpp similarity index 99% rename from rugnux/RigidBodyRefine.cpp rename to image_analysis/structure_refinement/RigidBodyRefine.cpp index 16535e169..dc9e71b2d 100644 --- a/rugnux/RigidBodyRefine.cpp +++ b/image_analysis/structure_refinement/RigidBodyRefine.cpp @@ -26,9 +26,9 @@ #ifdef JFJOCH_USE_CUDA #include "RigidBodyGPU.h" // RigidBodyTargetGPU #endif -#include "../common/JFJochMath.h" // PI -#include "../common/ParallelFor.h" -#include "../common/Logger.h" +#include "../../common/JFJochMath.h" // PI +#include "../../common/ParallelFor.h" +#include "../../common/Logger.h" namespace { diff --git a/rugnux/RigidBodyRefine.h b/image_analysis/structure_refinement/RigidBodyRefine.h similarity index 100% rename from rugnux/RigidBodyRefine.h rename to image_analysis/structure_refinement/RigidBodyRefine.h diff --git a/rugnux/SigmaA.cpp b/image_analysis/structure_refinement/SigmaA.cpp similarity index 100% rename from rugnux/SigmaA.cpp rename to image_analysis/structure_refinement/SigmaA.cpp diff --git a/rugnux/SigmaA.h b/image_analysis/structure_refinement/SigmaA.h similarity index 100% rename from rugnux/SigmaA.h rename to image_analysis/structure_refinement/SigmaA.h diff --git a/rugnux/CMakeLists.txt b/rugnux/CMakeLists.txt index 1fe64b8f6..91995c357 100644 --- a/rugnux/CMakeLists.txt +++ b/rugnux/CMakeLists.txt @@ -8,22 +8,6 @@ ADD_LIBRARY(JFJochRugnux STATIC Rugnux.h RugnuxCommandLine.cpp RugnuxCommandLine.h - ModelFFT.cpp - ModelFFT.h - ModelGrid.cpp - ModelGrid.h - ModelScaling.cpp - ModelScaling.h - ModelValidation.cpp - ModelValidation.h - RigidBodyRefine.cpp - RigidBodyRefine.h - $<$:RigidBodyGPU.cpp> - $<$:RigidBodyGPU.cu> - RigidBodyGPU.h - RigidBodyGPUEngine.h - SigmaA.cpp - SigmaA.h ResultReport.cpp ResultReport.h ReportDocument.h @@ -31,17 +15,13 @@ ADD_LIBRARY(JFJochRugnux STATIC LeftoverLattices.h SpotWidth.cpp SpotWidth.h - $<$:ModelMaskGPU.cu> - $<$:ModelScaleGPU.cu> DiagnosticOutput.cpp DiagnosticOutput.h SpindleCuspLoss.cpp SpindleCuspLoss.h - WriteModel.cpp - WriteModel.h ) -TARGET_LINK_LIBRARIES(JFJochRugnux JFJochReader JFJochImageAnalysis JFJochWriter JFJochPreview gemmi fftw3f) +TARGET_LINK_LIBRARIES(JFJochRugnux JFJochReader JFJochImageAnalysis JFJochWriter JFJochModelWriter JFJochPreview gemmi fftw3f) # rugnux is the single offline analysis CLI; --mode picks what it does: mx (the full pipeline, the # default), azint, scale (re-scale/merge stored reflections) or calibration (powder-ring geometry). diff --git a/rugnux/Rugnux.cpp b/rugnux/Rugnux.cpp index fdecd2b9b..e85682a8c 100644 --- a/rugnux/Rugnux.cpp +++ b/rugnux/Rugnux.cpp @@ -3,8 +3,8 @@ #include #include "Rugnux.h" -#include "ModelValidation.h" -#include "WriteModel.h" +#include "../image_analysis/structure_refinement/ModelValidation.h" +#include "../writer/WriteModel.h" #include "SpindleCuspLoss.h" #include "SpotWidth.h" #include "../image_analysis/bragg_integration/SpotFootprint.h" diff --git a/rugnux/Rugnux.h b/rugnux/Rugnux.h index 8ef3f2af0..bb3351e05 100644 --- a/rugnux/Rugnux.h +++ b/rugnux/Rugnux.h @@ -30,7 +30,7 @@ #include "../image_analysis/scale_merge/CentreOfSymmetry.h" // CentreOfSymmetryResult #include "../image_analysis/scale_merge/TranslationalNCS.h" // TranslationalNCSResult #include "../image_analysis/indexing/HarmonicContamination.h" // HarmonicContaminationResult -#include "ModelValidation.h" // ModelValidationResult +#include "../image_analysis/structure_refinement/ModelValidation.h" // ModelValidationResult #include "LeftoverLattices.h" // LeftoverLatticeCensus #include "ReportDocument.h" // ReportWarning, PathologyCode #include "../image_analysis/scale_merge/SearchSpaceGroup.h" // SearchSpaceGroupResult diff --git a/rugnux/rugnux_cli.cpp b/rugnux/rugnux_cli.cpp index fea02e121..a4d711b96 100644 --- a/rugnux/rugnux_cli.cpp +++ b/rugnux/rugnux_cli.cpp @@ -61,8 +61,8 @@ #include "../image_analysis/scale_merge/SearchSpaceGroup.h" #include "Rugnux.h" #include "RugnuxDefaults.h" -#include "ModelValidation.h" -#include "WriteModel.h" +#include "../image_analysis/structure_refinement/ModelValidation.h" +#include "../writer/WriteModel.h" #include "ResultReport.h" #include "RugnuxConsole.h" diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index d2243ba6c..887fa4221 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -175,7 +175,7 @@ ADD_EXECUTABLE(jfjoch_test ) target_link_libraries(jfjoch_test Catch2WithMain JFJochBroker JFJochReceiver JFJochReader JFJochStreamWriter - JFJochRugnux JFJochImageAnalysis JFJochCommon JFJochHLSSimulation JFJochPreview + JFJochRugnux JFJochModelWriter JFJochImageAnalysis JFJochCommon JFJochHLSSimulation JFJochPreview jfjoch_xds_plugin ZLIB::ZLIB httplib::httplib) target_include_directories(jfjoch_test PRIVATE .) diff --git a/tests/ModelMaskGPUTest.cpp b/tests/ModelMaskGPUTest.cpp index d3a313b42..f464ce36c 100644 --- a/tests/ModelMaskGPUTest.cpp +++ b/tests/ModelMaskGPUTest.cpp @@ -16,8 +16,8 @@ #include #include -#include "../rugnux/ModelGrid.h" -#include "../rugnux/ModelMaskGPU.h" +#include "../image_analysis/structure_refinement/ModelGrid.h" +#include "../image_analysis/structure_refinement/ModelMaskGPU.h" namespace { diff --git a/tests/ModelScaleGPUTest.cpp b/tests/ModelScaleGPUTest.cpp index 8dbd576f8..7406565c2 100644 --- a/tests/ModelScaleGPUTest.cpp +++ b/tests/ModelScaleGPUTest.cpp @@ -23,12 +23,12 @@ #include "gemmi/unitcell.hpp" #include "../common/Logger.h" -#include "../rugnux/ModelFFT.h" -#include "../rugnux/ModelGrid.h" -#include "../rugnux/ModelScaling.h" -#include "../rugnux/ModelScaleGPU.h" -#include "../rugnux/ModelValidation.h" -#include "../rugnux/RigidBodyRefine.h" +#include "../image_analysis/structure_refinement/ModelFFT.h" +#include "../image_analysis/structure_refinement/ModelGrid.h" +#include "../image_analysis/structure_refinement/ModelScaling.h" +#include "../image_analysis/structure_refinement/ModelScaleGPU.h" +#include "../image_analysis/structure_refinement/ModelValidation.h" +#include "../image_analysis/structure_refinement/RigidBodyRefine.h" namespace { diff --git a/tests/ModelScalingTest.cpp b/tests/ModelScalingTest.cpp index 28aa20bbc..741f19d39 100644 --- a/tests/ModelScalingTest.cpp +++ b/tests/ModelScalingTest.cpp @@ -7,7 +7,7 @@ #include #include -#include "../rugnux/ModelScaling.h" +#include "../image_analysis/structure_refinement/ModelScaling.h" #include "gemmi/scaling.hpp" #include "gemmi/symmetry.hpp" #include "gemmi/unitcell.hpp" diff --git a/tests/ModelValidationTest.cpp b/tests/ModelValidationTest.cpp index 57fb62860..baf75aff2 100644 --- a/tests/ModelValidationTest.cpp +++ b/tests/ModelValidationTest.cpp @@ -18,17 +18,17 @@ #include #include "../common/Logger.h" -#include "../rugnux/ModelFFT.h" -#include "../rugnux/ModelGrid.h" -#include "../rugnux/ModelValidation.h" -#include "../rugnux/RigidBodyRefine.h" +#include "../image_analysis/structure_refinement/ModelFFT.h" +#include "../image_analysis/structure_refinement/ModelGrid.h" +#include "../image_analysis/structure_refinement/ModelValidation.h" +#include "../image_analysis/structure_refinement/RigidBodyRefine.h" #ifdef JFJOCH_USE_CUDA -#include "../rugnux/RigidBodyGPU.h" -#include "../rugnux/RigidBodyGPUEngine.h" +#include "../image_analysis/structure_refinement/RigidBodyGPU.h" +#include "../image_analysis/structure_refinement/RigidBodyGPUEngine.h" #include "../common/CUDAWrapper.h" #endif -#include "../rugnux/SigmaA.h" -#include "../rugnux/WriteModel.h" +#include "../image_analysis/structure_refinement/SigmaA.h" +#include "../writer/WriteModel.h" #include "../image_analysis/scale_merge/ReindexAmbiguity.h" namespace { diff --git a/writer/CMakeLists.txt b/writer/CMakeLists.txt index a33b967ce..2f6f43738 100644 --- a/writer/CMakeLists.txt +++ b/writer/CMakeLists.txt @@ -33,6 +33,13 @@ ADD_LIBRARY(JFJochWriter STATIC TARGET_LINK_LIBRARIES(JFJochWriter JFJochPreview JFJochLogger JFJochHDF5Wrappers CBORStream2FrameSerialize) +# The placed atomic model (mmCIF/PDB) that rugnux writes beside its merged output. Its own target, +# because it needs gemmi, which JFJochWriter does not link and a writer-only build does not want. +IF (NOT JFJOCH_WRITER_ONLY) + ADD_LIBRARY(JFJochModelWriter STATIC WriteModel.cpp WriteModel.h) + TARGET_LINK_LIBRARIES(JFJochModelWriter JFJochLogger gemmi) +ENDIF() + # The streaming writer and the jfjoch_writer service belong to the Linux server stack, not the # portable viewer subset: JFJochStreamWriter pulls in JFJochImagePuller (not built in a viewer-only # tree) and jfjoch_writer uses a fork()/waitpid() multi-process design (, no Windows diff --git a/rugnux/WriteModel.cpp b/writer/WriteModel.cpp similarity index 100% rename from rugnux/WriteModel.cpp rename to writer/WriteModel.cpp diff --git a/rugnux/WriteModel.h b/writer/WriteModel.h similarity index 100% rename from rugnux/WriteModel.h rename to writer/WriteModel.h