Skip to content
Snippets Groups Projects
Commit e798aba0 authored by Mikhail Svechnikov's avatar Mikhail Svechnikov Committed by Mikhail Svechnikov
Browse files

MaskUnitsConverter uses frame

parent 30c80cb5
No related branches found
No related tags found
1 merge request!2234Convert mask coords to bins before passing to detector (#823)
......@@ -22,6 +22,7 @@
#include "GUI/Model/Detector/ResolutionFunctionItems.h"
#include "GUI/Model/Mask/MaskContainerItem.h"
#include "GUI/Model/Mask/MaskItems.h"
#include "GUI/Model/Mask/MaskUnitsConverter.h"
#include "GUI/Support/XML/Backup.h"
namespace {
......
......@@ -13,51 +13,30 @@
// ************************************************************************************************
#include "GUI/Model/Mask/MaskUnitsConverter.h"
#include "Base/Axis/Frame.h"
#include "Base/Axis/FrameUtil.h"
#include "Device/Data/Datafield.h"
#include "GUI/Model/Data/Data2DItem.h"
#include "GUI/Model/Mask/MaskItems.h"
#include "GUI/Model/Mask/ProjectionContainerItem.h"
MaskUnitsConverter::MaskUnitsConverter()
: m_data(nullptr)
MaskUnitsConverter::MaskUnitsConverter(const Frame& frame)
: m_frame(frame)
, m_direction(UNDEFINED)
{
}
//! Converts all masks on board of IntensityDataItem into bin-fraction coordinates.
//! Converts mask from coordinates of Frame to axes bin-fraction coordinates.
void MaskUnitsConverter::convertToNbins(Data2DItem* intensityData)
void MaskUnitsConverter::convertToNbins(MaskItem* maskItem)
{
m_direction = TO_NBINS;
convertIntensityDataItem(intensityData);
convertMask(maskItem);
}
//! Converts all masks on board of IntensityDataItem from bin-fraction coordinates to coordinates
//! of axes currently defined in Datafield.
//! Converts mask from bin-fraction coordinates to coordinates of Frame axes.
void MaskUnitsConverter::convertFromNbins(Data2DItem* intensityData)
void MaskUnitsConverter::convertFromNbins(MaskItem* maskItem)
{
m_direction = FROM_NBINS;
convertIntensityDataItem(intensityData);
}
//! Converts all masks on board of IntensityDataItem from/to bin-fraction coordinates
void MaskUnitsConverter::convertIntensityDataItem(Data2DItem* intensityData)
{
if (!intensityData || !intensityData->c_field())
return;
m_data = intensityData->c_field();
if (intensityData->maskContainerItem())
for (auto* maskItem : intensityData->maskContainerItem()->maskItems())
convertMask(maskItem);
if (intensityData->projectionContainerItem())
for (auto* maskItem : intensityData->projectionContainerItem()->maskItems())
convertMask(maskItem);
convertMask(maskItem);
}
//! Converts single mask from/to bin-fraction coordinates
......@@ -88,11 +67,11 @@ void MaskUnitsConverter::convertMask(MaskItem* maskItem)
double y2 = yc + yR;
if (m_direction == TO_NBINS) {
FrameUtil::coordinatesToBinf(xc, yc, m_data->frame());
FrameUtil::coordinatesToBinf(x2, y2, m_data->frame());
FrameUtil::coordinatesToBinf(xc, yc, m_frame);
FrameUtil::coordinatesToBinf(x2, y2, m_frame);
} else {
FrameUtil::coordinatesFromBinf(xc, yc, m_data->frame());
FrameUtil::coordinatesFromBinf(x2, y2, m_data->frame());
FrameUtil::coordinatesFromBinf(xc, yc, m_frame);
FrameUtil::coordinatesFromBinf(x2, y2, m_frame);
}
ellItem->setXCenter(xc);
ellItem->setYCenter(yc);
......@@ -107,12 +86,11 @@ double MaskUnitsConverter::convert(double value, Axis axis)
{
auto axis_index = static_cast<size_t>(axis);
ASSERT(m_data);
ASSERT(axis_index == 0 || axis_index == 1);
if (m_direction == TO_NBINS)
return FrameUtil::coordinateToBinf(value, m_data->axis(axis_index));
return FrameUtil::coordinateToBinf(value, m_frame.axis(axis_index));
if (m_direction == FROM_NBINS)
return FrameUtil::coordinateFromBinf(value, m_data->axis(axis_index));
return FrameUtil::coordinateFromBinf(value, m_frame.axis(axis_index));
ASSERT(false);
}
......@@ -15,8 +15,7 @@
#ifndef BORNAGAIN_GUI_MODEL_DATA_MASKUNITSCONVERTER_H
#define BORNAGAIN_GUI_MODEL_DATA_MASKUNITSCONVERTER_H
class Data2DItem;
class Datafield;
class Frame;
class MaskItem;
//! The MaskUnitsConverter converts coordinates of all masks from one units to anoter.
......@@ -30,20 +29,19 @@ class MaskUnitsConverter {
public:
enum EConvertionDirection { TO_NBINS, FROM_NBINS, UNDEFINED };
MaskUnitsConverter();
MaskUnitsConverter(const Frame& frame);
void convertToNbins(Data2DItem* intensityData);
void convertFromNbins(Data2DItem* intensityData);
void convertToNbins(MaskItem *maskItem);
void convertFromNbins(MaskItem* maskItem);
private:
enum class Axis { X, Y };
void convertIntensityDataItem(Data2DItem* intensityData);
void convertMask(MaskItem* maskItem);
double convert(double value, Axis axis);
const Datafield* m_data;
const Frame& m_frame;
EConvertionDirection m_direction;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment