BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
MaskUnitsConverter Class Reference

The MaskUnitsConverter converts coordinates of all masks from one units to anoter. More...

Collaboration diagram for MaskUnitsConverter:
[legend]

Public Types

enum  EConvertionDirection { TO_NBINS , FROM_NBINS , UNDEFINED }
 

Public Member Functions

 MaskUnitsConverter ()
 
void convertFromNbins (IntensityDataItem *intensityData)
 Converts all masks on board of IntensityDataItem from bin-fraction coordinates to coordinates of axes currently defined in OutputData. More...
 
void convertToNbins (IntensityDataItem *intensityData)
 Converts all masks on board of IntensityDataItem into bin-fraction coordinates. More...
 

Private Member Functions

double convert (double value, int axis_index)
 Convert value of axis from/to bin-fraction coordinates. More...
 
void convertCoordinate (SessionItem *maskItem, const QString &xname, const QString &yname)
 Convert (x,y) coordinates registered as property (i.e. More...
 
void convertIntensityDataItem (IntensityDataItem *intensityData)
 Converts all masks on board of IntensityDataItem from/to bin-fraction coordinates. More...
 
void convertMask (SessionItem *maskItem)
 Converts single mask from/to bin-fraction coordinates. More...
 

Private Attributes

const OutputData< double > * m_data
 
EConvertionDirection m_direction
 

Detailed Description

The MaskUnitsConverter converts coordinates of all masks from one units to anoter.

I.e. masks in 'mm' into masks in 'deg'. This is done in two steps. On first step masks are converted from native coordinates (as given by axes of OutputData) into bin-fraction coordinates. On second step masks are converted from bin-fraction coordinates into current axes of OutputData.

Definition at line 31 of file MaskUnitsConverter.h.

Member Enumeration Documentation

◆ EConvertionDirection

Enumerator
TO_NBINS 
FROM_NBINS 
UNDEFINED 

Definition at line 33 of file MaskUnitsConverter.h.

Constructor & Destructor Documentation

◆ MaskUnitsConverter()

MaskUnitsConverter::MaskUnitsConverter ( )

Definition at line 22 of file MaskUnitsConverter.cpp.

22 : m_data(nullptr), m_direction(UNDEFINED) {}
const OutputData< double > * m_data
EConvertionDirection m_direction

Member Function Documentation

◆ convert()

double MaskUnitsConverter::convert ( double  value,
int  axis_index 
)
private

Convert value of axis from/to bin-fraction coordinates.

Definition at line 114 of file MaskUnitsConverter.cpp.

115 {
116  ASSERT(m_data);
117  ASSERT(axis_index == 0 || axis_index == 1);
118 
119  if (m_direction == TO_NBINS) {
120  return DataUtils::coordinateToBinf(value, m_data->axis(axis_index));
121  } else if (m_direction == FROM_NBINS) {
122  return DataUtils::coordinateFromBinf(value, m_data->axis(axis_index));
123  }
124  throw GUIHelpers::Error("MaskUnitsConverter::convertX() -> Error. Unknown conversion");
125 }
#define ASSERT(condition)
Definition: Assert.h:31
const IAxis & axis(size_t serial_number) const
returns axis with given serial number
Definition: OutputData.h:318
double coordinateToBinf(double coordinate, const IAxis &axis)
Transforms coordinate on axis into the bin-fraction-coordinate.
Definition: DataUtils.cpp:169
double coordinateFromBinf(double value, const IAxis &axis)
Transforms bin-fraction-coordinate into axis coordinate.
Definition: DataUtils.cpp:177

References ASSERT, OutputData< T >::axis(), DataUtils::coordinateFromBinf(), DataUtils::coordinateToBinf(), FROM_NBINS, m_data, m_direction, and TO_NBINS.

Referenced by convertCoordinate().

Here is the call graph for this function:

◆ convertCoordinate()

void MaskUnitsConverter::convertCoordinate ( SessionItem maskItem,
const QString &  xname,
const QString &  yname 
)
private

Convert (x,y) coordinates registered as property (i.e.

under P_XPOS, P_YPOS) from/to bin-fraction coordinates. Result of operation are new values for registered properties.

Definition at line 99 of file MaskUnitsConverter.cpp.

101 {
102  if (maskItem->isTag(xname)) {
103  double x = convert(maskItem->getItemValue(xname).toDouble(), 0);
104  maskItem->setItemValue(xname, x);
105  }
106  if (maskItem->isTag(yname)) {
107  double y = convert(maskItem->getItemValue(yname).toDouble(), 1);
108  maskItem->setItemValue(yname, y);
109  }
110 }
double convert(double value, int axis_index)
Convert value of axis from/to bin-fraction coordinates.
bool isTag(const QString &name) const
Returns true if tag is available.
QVariant getItemValue(const QString &tag) const
Directly access value of item under given tag.
void setItemValue(const QString &tag, const QVariant &variant)
Directly set value of item under given tag.

References convert(), SessionItem::getItemValue(), SessionItem::isTag(), and SessionItem::setItemValue().

Referenced by convertMask().

Here is the call graph for this function:

◆ convertFromNbins()

void MaskUnitsConverter::convertFromNbins ( IntensityDataItem intensityData)

Converts all masks on board of IntensityDataItem from bin-fraction coordinates to coordinates of axes currently defined in OutputData.

Definition at line 35 of file MaskUnitsConverter.cpp.

36 {
38  convertIntensityDataItem(intensityData);
39 }
void convertIntensityDataItem(IntensityDataItem *intensityData)
Converts all masks on board of IntensityDataItem from/to bin-fraction coordinates.

References convertIntensityDataItem(), FROM_NBINS, and m_direction.

Referenced by IntensityDataItem::reset(), and IntensityDataItem::updateAxesUnits().

Here is the call graph for this function:

◆ convertIntensityDataItem()

void MaskUnitsConverter::convertIntensityDataItem ( IntensityDataItem intensityData)
private

Converts all masks on board of IntensityDataItem from/to bin-fraction coordinates.

Definition at line 43 of file MaskUnitsConverter.cpp.

44 {
45  if (!intensityData || !intensityData->getOutputData())
46  return;
47 
48  m_data = intensityData->getOutputData();
49 
50  if (intensityData->maskContainerItem())
51  for (SessionItem* maskItem : intensityData->maskContainerItem()->getItems())
52  convertMask(maskItem);
53 
54  if (intensityData->projectionContainerItem())
55  for (SessionItem* maskItem : intensityData->projectionContainerItem()->getItems())
56  convertMask(maskItem);
57 }
OutputData< double > * getOutputData()
Definition: DataItem.h:36
MaskContainerItem * maskContainerItem()
ProjectionContainerItem * projectionContainerItem()
void convertMask(SessionItem *maskItem)
Converts single mask from/to bin-fraction coordinates.
QVector< SessionItem * > getItems(const QString &tag="") const
Returns vector of all items of given tag.

References convertMask(), SessionItem::getItems(), DataItem::getOutputData(), m_data, IntensityDataItem::maskContainerItem(), and IntensityDataItem::projectionContainerItem().

Referenced by convertFromNbins(), and convertToNbins().

Here is the call graph for this function:

◆ convertMask()

void MaskUnitsConverter::convertMask ( SessionItem maskItem)
private

Converts single mask from/to bin-fraction coordinates.

Definition at line 61 of file MaskUnitsConverter.cpp.

62 {
63  if (maskItem->modelType() == "RectangleMask" || maskItem->modelType() == "RegionOfInterest") {
66  } else if (maskItem->modelType() == "PolygonMask") {
67  for (SessionItem* pointItem : maskItem->getChildrenOfType("PolygonPoint"))
69  } else if (maskItem->modelType() == "VerticalLineMask") {
70  convertCoordinate(maskItem, VerticalLineItem::P_POSX, QString());
71  } else if (maskItem->modelType() == "HorizontalLineMask") {
72  convertCoordinate(maskItem, QString(), HorizontalLineItem::P_POSY);
73  } else if (maskItem->modelType() == "EllipseMask") {
74  double xc = maskItem->getItemValue(EllipseItem::P_XCENTER).toDouble();
75  double yc = maskItem->getItemValue(EllipseItem::P_YCENTER).toDouble();
76  double xR = maskItem->getItemValue(EllipseItem::P_XRADIUS).toDouble();
77  double yR = maskItem->getItemValue(EllipseItem::P_YRADIUS).toDouble();
78 
79  double x2 = xc + xR;
80  double y2 = yc + yR;
81 
82  if (m_direction == TO_NBINS) {
85  } else {
88  }
89  maskItem->setItemValue(EllipseItem::P_XCENTER, xc);
90  maskItem->setItemValue(EllipseItem::P_YCENTER, yc);
91  maskItem->setItemValue(EllipseItem::P_XRADIUS, x2 - xc);
92  maskItem->setItemValue(EllipseItem::P_YRADIUS, y2 - yc);
93  }
94 }
static const QString P_XRADIUS
Definition: MaskItems.h:91
static const QString P_YRADIUS
Definition: MaskItems.h:92
static const QString P_XCENTER
Definition: MaskItems.h:89
static const QString P_YCENTER
Definition: MaskItems.h:90
static const QString P_POSY
Definition: MaskItems.h:81
void convertCoordinate(SessionItem *maskItem, const QString &xname, const QString &yname)
Convert (x,y) coordinates registered as property (i.e.
static const QString P_POSX
Definition: MaskItems.h:57
static const QString P_POSY
Definition: MaskItems.h:58
static const QString P_XUP
Definition: MaskItems.h:43
static const QString P_YLOW
Definition: MaskItems.h:42
static const QString P_YUP
Definition: MaskItems.h:44
static const QString P_XLOW
Definition: MaskItems.h:41
QVector< SessionItem * > getChildrenOfType(const QString &model_type) const
Returns a vector of all children of the given type.
QString modelType() const
Get model type.
static const QString P_POSX
Definition: MaskItems.h:73

References convertCoordinate(), DataUtils::coordinateFromBinf(), DataUtils::coordinateToBinf(), SessionItem::getChildrenOfType(), SessionItem::getItemValue(), m_data, m_direction, SessionItem::modelType(), PolygonPointItem::P_POSX, VerticalLineItem::P_POSX, PolygonPointItem::P_POSY, HorizontalLineItem::P_POSY, EllipseItem::P_XCENTER, RectangleItem::P_XLOW, EllipseItem::P_XRADIUS, RectangleItem::P_XUP, EllipseItem::P_YCENTER, RectangleItem::P_YLOW, EllipseItem::P_YRADIUS, RectangleItem::P_YUP, SessionItem::setItemValue(), and TO_NBINS.

Referenced by convertIntensityDataItem().

Here is the call graph for this function:

◆ convertToNbins()

void MaskUnitsConverter::convertToNbins ( IntensityDataItem intensityData)

Converts all masks on board of IntensityDataItem into bin-fraction coordinates.

Definition at line 26 of file MaskUnitsConverter.cpp.

27 {
29  convertIntensityDataItem(intensityData);
30 }

References convertIntensityDataItem(), m_direction, and TO_NBINS.

Referenced by IntensityDataItem::reset(), and IntensityDataItem::updateAxesUnits().

Here is the call graph for this function:

Member Data Documentation

◆ m_data

const OutputData<double>* MaskUnitsConverter::m_data
private

Definition at line 48 of file MaskUnitsConverter.h.

Referenced by convert(), convertIntensityDataItem(), and convertMask().

◆ m_direction

EConvertionDirection MaskUnitsConverter::m_direction
private

Definition at line 49 of file MaskUnitsConverter.h.

Referenced by convert(), convertFromNbins(), convertMask(), and convertToNbins().


The documentation for this class was generated from the following files: