v1.0.0-rc.81

This commit is contained in:
2025-09-21 19:27:51 +02:00
parent 3ded4cd3ce
commit 5d9d2de4a4
243 changed files with 3401 additions and 935 deletions
+70 -16
View File
@@ -4,13 +4,17 @@
#include "JFJochImageReadingWorker.h"
#include "../image_analysis/geom_refinement/AssignSpotsToRings.h"
#include "../image_analysis/spot_finding/StrongPixelSet.h"
#include "../image_analysis/spot_finding/SpotAnalysis.h"
#include "../image_analysis/spot_finding/SpotUtils.h"
#include "../image_analysis/spot_finding/ImageSpotFinder.h"
#include <QVector>
#include <QMutexLocker>
JFJochImageReadingWorker::JFJochImageReadingWorker(QObject *parent) : QObject(parent) {
spot_finding_settings.high_resolution_limit = 0.5;
JFJochImageReadingWorker::JFJochImageReadingWorker(const SpotFindingSettings& settings,
const IndexingSettings& in_indexing_settings,
QObject *parent) : QObject(parent) {
spot_finding_settings = settings;
indexing_settings = in_indexing_settings;
indexing = std::make_unique<IndexerThreadPool>(indexing_settings);
}
void JFJochImageReadingWorker::LoadFile(const QString &filename, qint64 image_number, qint64 summation) {
@@ -43,6 +47,7 @@ void JFJochImageReadingWorker::LoadFile(const QString &filename, qint64 image_nu
current_summation = 1;
current_file = filename;
}
UpdateAzint_in(dataset.get());
emit datasetLoaded(dataset);
auto end = std::chrono::high_resolution_clock::now();
@@ -86,6 +91,16 @@ void JFJochImageReadingWorker::AnalyzeImage_i() {
}
}
void JFJochImageReadingWorker::UpdateAzint_in(const JFJochReaderDataset *dataset) {
if (dataset) {
azint_mapping = std::make_unique<AzimuthalIntegration>(dataset->experiment,
dataset->pixel_mask);
image_analysis = std::make_unique<ImageAnalysisCPU>(dataset->experiment,
*azint_mapping, dataset->pixel_mask);
image_analysis->SetIndexer(indexing.get());
}
}
void JFJochImageReadingWorker::LoadImage_i(int64_t image_number, int64_t summation) {
// Assumes m locked!
try {
@@ -168,6 +183,7 @@ void JFJochImageReadingWorker::UpdateDataset_i(const DiffractionExperiment &expe
reader.UpdateGeomMetadata(experiment);
dataset = reader.GetDataset();
}
UpdateAzint_in(dataset.get());
emit datasetLoaded(dataset);
current_image_ptr = std::make_shared<JFJochReaderImage>(current_image_ptr->ImageData(), dataset);
@@ -180,25 +196,42 @@ void JFJochImageReadingWorker::UpdateDataset(const DiffractionExperiment &experi
UpdateDataset_i(experiment);
}
void JFJochImageReadingWorker::AzimIntegration() {
QMutexLocker locker(&m);
if (!current_image_ptr)
void JFJochImageReadingWorker::ReanalyzeImage_i() {
if (!current_image_ptr || !azint_mapping || !image_analysis)
return;
// AzimuthalIntegration integration(image->Dataset().experiment, image->Dataset().pixel_mask);
// ...
auto start_time = std::chrono::high_resolution_clock::now();
auto new_image = std::make_shared<JFJochReaderImage>(*current_image_ptr);
auto new_image_dataset = new_image->CreateMutableDataset();
new_image_dataset->az_int_bin_to_phi = azint_mapping->GetBinToPhi();
new_image_dataset->az_int_bin_to_q = azint_mapping->GetBinToQ();
new_image_dataset->azimuthal_bins = azint_mapping->GetAzimuthalBinCount();
new_image_dataset->q_bins = azint_mapping->GetQBinCount();
std::vector<uint8_t> buffer;
AzimuthalIntegrationProfile azint_profile(*azint_mapping);
image_analysis->Analyze(new_image->ImageData(), buffer, azint_profile, spot_finding_settings);
current_image_ptr = new_image;
auto end_time = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time);
logger.Info("Analysis of image in {} ms", duration.count());
emit imageLoaded(current_image_ptr);
}
void JFJochImageReadingWorker::Analyze() {
QMutexLocker locker(&m);
ReanalyzeImage_i();
}
void JFJochImageReadingWorker::FindSpots() {
QMutexLocker locker(&m);
if (!current_image_ptr)
if (!current_image_ptr || !azint_mapping)
return;
AzimuthalIntegration integration(current_image_ptr->Dataset().experiment,
current_image_ptr->Dataset().pixel_mask);
ImageSpotFinder finder(integration);
ImageSpotFinder finder(*azint_mapping);
std::shared_ptr<JFJochReaderImage> new_image = std::make_shared<JFJochReaderImage>(*current_image_ptr);
@@ -213,7 +246,10 @@ void JFJochImageReadingWorker::FindSpots() {
new_image->ImageData().spots.clear();
FilterSpotsByCount(1000, spots_out, new_image->ImageData().spots);
FilterSpotsByCount(spots_out, 1000);
MarkIceRings(spots_out, 0.02);
new_image->ImageData().spots = spots_out;
current_image_ptr = new_image;
emit imageLoaded(new_image);
@@ -244,4 +280,22 @@ void JFJochImageReadingWorker::FindCenter() {
.PoniRot3_rad(geom.GetPoniRot3_rad());
UpdateDataset_i(new_experiment);
}
QVector<float> rings;
for (int i = 1; i < 7; i++)
rings.push_back(LAB6_CELL_A / sqrtf(i));
emit setRings(rings);
}
void JFJochImageReadingWorker::UpdateSpotFindingSettings(const SpotFindingSettings &settings, const IndexingSettings &indexing, bool reanalyze) {
QMutexLocker locker(&m);
spot_finding_settings = settings;
// "local" indexing settings
indexing_settings.Tolerance(indexing.GetTolerance());
indexing_settings.ViableCellMinSpots(indexing.GetViableCellMinSpots());
indexing_settings.IndexIceRings(indexing.GetIndexIceRings());
indexing_settings.UnitCellDistTolerance(indexing.GetUnitCellDistTolerance());
if (reanalyze)
ReanalyzeImage_i();
}