jfjoch_viewer: Add Image B-factor
This commit is contained in:
@@ -885,6 +885,7 @@ PlotType ConvertPlotType(const std::optional<std::string>& input) {
|
||||
if (input == "integrated_reflections") return PlotType::IntegratedReflections;
|
||||
if (input == "image_scale_factor") return PlotType::ImageScaleFactor;
|
||||
if (input == "image_scale_cc") return PlotType::ImageScaleCC;
|
||||
if (input == "image_scale_b") return PlotType::ImageScaleBFactor;
|
||||
|
||||
throw JFJochException(JFJochExceptionCategory::InputParameterInvalid,
|
||||
"Plot type not recognized");
|
||||
|
||||
@@ -118,6 +118,7 @@ components:
|
||||
- integrated_reflections
|
||||
- image_scale_factor
|
||||
- image_scale_cc
|
||||
- image_scale_b
|
||||
roi:
|
||||
in: query
|
||||
name: roi
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ enum class PlotType {
|
||||
ROISum, ROIMean, ROIMaxCount, ROIPixels, ROIWeightedX, ROIWeightedY, PacketsReceived, MaxValue,
|
||||
ResolutionEstimate, ProfileRadius, Mosaicity, BFactor, PixelSum, StrongPixels,
|
||||
RefinementBeamX, RefinementBeamY, ImageProcessingTime, IntegratedReflections,
|
||||
ImageScaleFactor, ImageScaleCC
|
||||
ImageScaleFactor, ImageScaleCC, ImageScaleBFactor
|
||||
};
|
||||
|
||||
enum class PlotAzintUnit {
|
||||
|
||||
@@ -291,6 +291,7 @@ void JFJochHDF5Reader::ReadFile(const std::string &filename) {
|
||||
dataset->b_factor = master_file->ReadOptVector<float>("/entry/MX/bFactor");
|
||||
dataset->image_scale_factor = master_file->ReadOptVector<float>("/entry/MX/imageScaleFactor");
|
||||
dataset->image_scale_cc = master_file->ReadOptVector<float>("/entry/MX/imageScaleCC");
|
||||
dataset->image_scale_b = master_file->ReadOptVector<float>("/entry/MX/imageScaleBFactor");
|
||||
dataset->integrated_reflections = master_file->ReadOptVector<float>("/entry/MX/integratedReflections");
|
||||
}
|
||||
if (master_file->Exists("/entry/image"))
|
||||
|
||||
@@ -185,6 +185,7 @@ std::shared_ptr<JFJochReaderDataset> JFJochHttpReader::UpdateDataset_i() {
|
||||
dataset->integrated_reflections = GetPlot_i("integrated_reflections");
|
||||
dataset->image_scale_factor = GetPlot_i("image_scale_factor");
|
||||
dataset->image_scale_cc = GetPlot_i("image_scale_cc");
|
||||
dataset->image_scale_b = GetPlot_i("image_scale_b");
|
||||
|
||||
if (msg->start_message->goniometer)
|
||||
dataset->experiment.Goniometer(msg->start_message->goniometer);
|
||||
|
||||
@@ -43,6 +43,7 @@ struct JFJochReaderDataset {
|
||||
std::vector<float> integrated_reflections;
|
||||
std::vector<float> image_scale_factor;
|
||||
std::vector<float> image_scale_cc;
|
||||
std::vector<float> image_scale_b;
|
||||
|
||||
std::vector<int64_t> max_value;
|
||||
|
||||
|
||||
@@ -108,6 +108,7 @@ void JFJochReceiverPlots::Setup(const DiffractionExperiment &experiment, const A
|
||||
integrated_reflections.Clear(r);
|
||||
image_scale_factor.Clear(r);
|
||||
image_scale_cc.Clear(r);
|
||||
image_scale_b.Clear(r);
|
||||
|
||||
refinement_time.Clear(r);
|
||||
spot_finding_time.Clear(r);
|
||||
@@ -173,6 +174,7 @@ void JFJochReceiverPlots::Add(const DataMessage &msg, const AzimuthalIntegration
|
||||
indexing_solution.AddElement(msg.number, msg.indexing_result);
|
||||
image_scale_factor.AddElement(msg.number, msg.image_scale_factor);
|
||||
image_scale_cc.AddElement(msg.number, msg.image_scale_cc);
|
||||
image_scale_b.AddElement(msg.number, msg.image_scale_b_factor);
|
||||
|
||||
{
|
||||
std::unique_lock ul(m);
|
||||
@@ -328,6 +330,9 @@ MultiLinePlot JFJochReceiverPlots::GetPlots(const PlotRequest &request) {
|
||||
case PlotType::ImageScaleCC:
|
||||
ret = image_scale_cc.GetMeanPlot(nbins, start, incr, request.fill_value);
|
||||
break;
|
||||
case PlotType::ImageScaleBFactor:
|
||||
ret = image_scale_b.GetMeanPlot(nbins, start, incr, request.fill_value);
|
||||
break;
|
||||
case PlotType::ImageScaleFactor:
|
||||
ret = image_scale_factor.GetMeanPlot(nbins, start, incr, request.fill_value);
|
||||
break;
|
||||
@@ -552,6 +557,9 @@ void JFJochReceiverPlots::GetPlotRaw(std::vector<float> &v, PlotType type, const
|
||||
case PlotType::ImageScaleFactor:
|
||||
v = image_scale_factor.ExportArray();
|
||||
break;
|
||||
case PlotType::ImageScaleBFactor:
|
||||
v = image_scale_b.ExportArray();
|
||||
break;
|
||||
case PlotType::ROISum:
|
||||
case PlotType::ROIMaxCount:
|
||||
case PlotType::ROIPixels:
|
||||
|
||||
@@ -69,6 +69,7 @@ class JFJochReceiverPlots {
|
||||
StatusVector integrated_reflections;
|
||||
StatusVector image_scale_factor;
|
||||
StatusVector image_scale_cc;
|
||||
StatusVector image_scale_b;
|
||||
|
||||
// StatusVector objects are fully thread-safe (protected by internal mutex)
|
||||
// It is OK to have concurrent access to StatusVector
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
#include <QHeaderView>
|
||||
#include <QCloseEvent>
|
||||
|
||||
namespace {
|
||||
constexpr int ScaleSortRole = Qt::UserRole + 1;
|
||||
constexpr double ScaleNotAvailableSortValue = -1.0e100;
|
||||
}
|
||||
|
||||
JFJochViewerImageListWindow::JFJochViewerImageListWindow(QWidget *parent) : JFJochHelperWindow(parent) {
|
||||
|
||||
QWidget *centralWidget = new QWidget(this);
|
||||
@@ -21,6 +26,7 @@ JFJochViewerImageListWindow::JFJochViewerImageListWindow(QWidget *parent) : JFJo
|
||||
|
||||
proxyModel = new QSortFilterProxyModel(this);
|
||||
proxyModel->setSourceModel(tableModel);
|
||||
proxyModel->setSortRole(ScaleSortRole);
|
||||
|
||||
tableView->setModel(proxyModel);
|
||||
tableView->sortByColumn(0, Qt::AscendingOrder);
|
||||
@@ -45,15 +51,16 @@ JFJochViewerImageListWindow::JFJochViewerImageListWindow(QWidget *parent) : JFJo
|
||||
|
||||
void JFJochViewerImageListWindow::setupTableModel()
|
||||
{
|
||||
tableModel->setColumnCount(8);
|
||||
tableModel->setColumnCount(9);
|
||||
tableModel->setHeaderData(0, Qt::Horizontal, "#");
|
||||
tableModel->setHeaderData(1, Qt::Horizontal, "Background");
|
||||
tableModel->setHeaderData(2, Qt::Horizontal, "Indexing");
|
||||
tableModel->setHeaderData(1, Qt::Horizontal, "Bkg");
|
||||
tableModel->setHeaderData(2, Qt::Horizontal, "Index");
|
||||
tableModel->setHeaderData(3, Qt::Horizontal, "Spots");
|
||||
tableModel->setHeaderData(4, Qt::Horizontal, "Res. estimate");
|
||||
tableModel->setHeaderData(5, Qt::Horizontal, "Max");
|
||||
tableModel->setHeaderData(4, Qt::Horizontal, "Res. [A]");
|
||||
tableModel->setHeaderData(5, Qt::Horizontal, "Max val");
|
||||
tableModel->setHeaderData(6, Qt::Horizontal, "Scale factor");
|
||||
tableModel->setHeaderData(7, Qt::Horizontal, "Scale CC [%]");
|
||||
tableModel->setHeaderData(7, Qt::Horizontal, "Scale CC");
|
||||
tableModel->setHeaderData(8, Qt::Horizontal, "Scale B [A^2]");
|
||||
}
|
||||
|
||||
void JFJochViewerImageListWindow::addDataRow(int imageNumber, double backgroundEstimate,
|
||||
@@ -62,15 +69,18 @@ void JFJochViewerImageListWindow::addDataRow(int imageNumber, double backgroundE
|
||||
double resolutionEstimate,
|
||||
int64_t max_value,
|
||||
double image_scale_factor,
|
||||
double image_scale_cc_percent) {
|
||||
double image_scale_cc_percent,
|
||||
double image_scale_b) {
|
||||
QList<QStandardItem*> rowItems;
|
||||
|
||||
QStandardItem *imageItem = new QStandardItem();
|
||||
imageItem->setData(imageNumber, Qt::DisplayRole);
|
||||
imageItem->setData(imageNumber, ScaleSortRole);
|
||||
rowItems.append(imageItem);
|
||||
|
||||
QStandardItem *bgItem = new QStandardItem();
|
||||
bgItem->setData(backgroundEstimate, Qt::DisplayRole);
|
||||
bgItem->setData(backgroundEstimate, ScaleSortRole);
|
||||
rowItems.append(bgItem);
|
||||
|
||||
QStandardItem *indexingItem = new QStandardItem(indexingResult);
|
||||
@@ -78,30 +88,50 @@ void JFJochViewerImageListWindow::addDataRow(int imageNumber, double backgroundE
|
||||
|
||||
QStandardItem *spotItem = new QStandardItem();
|
||||
spotItem->setData(spotCount, Qt::DisplayRole);
|
||||
spotItem->setData(spotCount, ScaleSortRole);
|
||||
rowItems.append(spotItem);
|
||||
|
||||
QStandardItem *resolutionItem = new QStandardItem();
|
||||
resolutionItem->setData(resolutionEstimate, Qt::DisplayRole);
|
||||
resolutionItem->setData(QString::number(resolutionEstimate, 'f', 2), Qt::DisplayRole);
|
||||
resolutionItem->setData(resolutionEstimate, ScaleSortRole);
|
||||
rowItems.append(resolutionItem);
|
||||
|
||||
QStandardItem *maxValueItem = new QStandardItem();
|
||||
maxValueItem->setData(static_cast<int32_t>(max_value), Qt::DisplayRole);
|
||||
maxValueItem->setData(static_cast<int32_t>(max_value), ScaleSortRole);
|
||||
rowItems.append(maxValueItem);
|
||||
|
||||
QStandardItem *scaleFactorItem = new QStandardItem();
|
||||
if (std::isfinite(image_scale_factor))
|
||||
if (std::isfinite(image_scale_factor)) {
|
||||
scaleFactorItem->setData(image_scale_factor, Qt::DisplayRole);
|
||||
else
|
||||
scaleFactorItem->setData(image_scale_factor, ScaleSortRole);
|
||||
} else {
|
||||
scaleFactorItem->setData("N/A", Qt::DisplayRole);
|
||||
scaleFactorItem->setData(ScaleNotAvailableSortValue, ScaleSortRole);
|
||||
}
|
||||
rowItems.append(scaleFactorItem);
|
||||
|
||||
QStandardItem *scaleCCItem = new QStandardItem();
|
||||
if (std::isfinite(image_scale_cc_percent))
|
||||
scaleCCItem->setData(image_scale_cc_percent, Qt::DisplayRole);
|
||||
else
|
||||
if (std::isfinite(image_scale_cc_percent)) {
|
||||
scaleCCItem->setData(QString::number(image_scale_cc_percent, 'f', 1) + "%", Qt::DisplayRole);
|
||||
|
||||
scaleCCItem->setData(image_scale_cc_percent, ScaleSortRole);
|
||||
} else {
|
||||
scaleCCItem->setData("N/A", Qt::DisplayRole);
|
||||
scaleCCItem->setData(ScaleNotAvailableSortValue, ScaleSortRole);
|
||||
}
|
||||
rowItems.append(scaleCCItem);
|
||||
|
||||
QStandardItem *scaleBItem = new QStandardItem();
|
||||
if (std::isfinite(image_scale_b)) {
|
||||
scaleBItem->setData(QString::number(image_scale_b, 'f', 2), Qt::DisplayRole);
|
||||
scaleBItem->setData(image_scale_b, ScaleSortRole);
|
||||
} else {
|
||||
scaleBItem->setData("N/A", Qt::DisplayRole);
|
||||
scaleBItem->setData(ScaleNotAvailableSortValue, ScaleSortRole);
|
||||
}
|
||||
rowItems.append(scaleBItem);
|
||||
|
||||
tableModel->appendRow(rowItems);
|
||||
}
|
||||
|
||||
@@ -148,6 +178,10 @@ void JFJochViewerImageListWindow::datasetLoaded(std::shared_ptr<const JFJochRead
|
||||
if (dataset->image_scale_cc.size() > i)
|
||||
image_scale_cc_percent = dataset->image_scale_cc[i] * 100.0;
|
||||
|
||||
double image_scale_b = NAN;
|
||||
if (dataset->image_scale_b.size() > i)
|
||||
image_scale_b = dataset->image_scale_b[i];
|
||||
|
||||
addDataRow(i + 1,
|
||||
bkg_estimate,
|
||||
indexing_result,
|
||||
@@ -155,7 +189,8 @@ void JFJochViewerImageListWindow::datasetLoaded(std::shared_ptr<const JFJochRead
|
||||
res_estimation,
|
||||
max_value,
|
||||
image_scale_factor,
|
||||
image_scale_cc_percent);
|
||||
image_scale_cc_percent,
|
||||
image_scale_b);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,8 @@ class JFJochViewerImageListWindow : public JFJochHelperWindow {
|
||||
const QString &indexingResult, int spotCount,
|
||||
double resolutionEstimate, int64_t max_value,
|
||||
double image_scale_factor,
|
||||
double image_scale_cc_percent);
|
||||
double image_scale_cc_percent,
|
||||
double image_scale_b);
|
||||
|
||||
void clearAllData();
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user