Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • c.trageser/bornagain
  • mlz/bornagain
2 results
Show changes
Commits on Source (9)
......@@ -18,8 +18,8 @@
#include "Base/Util/Assert.h"
#include "Device/Beam/Beam.h"
#include "Device/Detector/SimulationAreaIterator.h"
#include "Device/Mask/DetectorMask.h"
#include "Device/Mask/InfinitePlane.h"
#include "Device/Mask/MaskStack.h"
#include "Device/Resolution/ConvolutionDetectorResolution.h"
#include <iostream>
......@@ -77,7 +77,7 @@ IDetector::IDetector(const IDetector& other)
, m_frame(other.m_frame->clone())
, m_polAnalyzer(other.m_polAnalyzer)
, m_resolution(other.m_resolution ? other.m_resolution->clone() : nullptr)
, m_mask(std::make_unique<DetectorMask>(*other.m_mask))
, m_mask(std::make_unique<MaskStack>(*other.m_mask))
{
}
......@@ -87,7 +87,12 @@ void IDetector::setFrame(Frame* frame)
{
ASSERT(frame->rank() == 2);
m_frame.reset(frame);
m_mask.reset(new DetectorMask(m_frame->axis(0), m_frame->axis(1)));
m_mask.reset(new MaskStack());
}
const Frame& IDetector::frame() const
{
return *m_frame;
}
const Scale& IDetector::axis(size_t i) const
......@@ -155,21 +160,19 @@ void IDetector::setResolutionFunction(const IResolutionFunction2D& resFunc)
setDetectorResolution(convFunc);
}
void IDetector::applyDetectorResolution(Datafield* intensity_map) const
void IDetector::applyDetectorResolution(Datafield* df) const
{
ASSERT(intensity_map);
ASSERT(df);
if (!m_resolution)
return;
m_resolution->applyDetectorResolution(intensity_map);
if (detectorMask() && detectorMask()->hasMasks()) {
// sets amplitude in masked areas to zero
auto buff = std::make_unique<Datafield>(intensity_map->frame().clone());
iterateOverNonMaskedPoints(
[&](const_iterator it) { (*buff)[it.roiIndex()] = (*intensity_map)[it.roiIndex()]; });
intensity_map->setVector(buff->flatVector());
}
m_resolution->applyDetectorResolution(df);
if (detectorMask())
// set amplitude in masked areas to zero
for (size_t i = 0; i < totalSize(); ++i)
if (detectorMask()->isMasked(i, frame()))
df->setAt(i, 0.);
}
Datafield IDetector::createDetectorMap() const
......@@ -203,7 +206,7 @@ void IDetector::iterateOverNonMaskedPoints(std::function<void(const_iterator)> f
func(it);
}
size_t IDetector::regionOfInterestIndexToDetectorIndex(const size_t i) const
size_t IDetector::roiToFullIndex(const size_t i) const
{
if (m_explicitROI.size() != 2)
return i;
......@@ -227,8 +230,11 @@ void IDetector::setRegionOfInterest(double xlow, double ylow, double xup, double
std::vector<size_t> IDetector::active_indices() const
{
std::vector<size_t> result;
iterateOverNonMaskedPoints([&](const_iterator it) { result.push_back(it.detectorIndex()); });
/*
for (size_t i = 0; i < totalSize(); ++i)
if (!detectorMask() || !detectorMask()->isMasked(i, frame()))
result.push_back(i);*/
return result;
}
......@@ -243,7 +249,7 @@ void IDetector::maskAll()
addMask(InfinitePlane(), true);
}
const DetectorMask* IDetector::detectorMask() const
const MaskStack* IDetector::detectorMask() const
{
return m_mask.get();
}
......
......@@ -21,7 +21,7 @@
class Beam;
class Datafield;
class DetectorMask;
class MaskStack;
class Frame;
class IDetectorResolution;
class IPixel;
......@@ -65,7 +65,8 @@ public:
std::vector<const INode*> nodeChildren() const override;
const DetectorMask* detectorMask() const;
const Frame& frame() const;
const MaskStack* detectorMask() const;
//! Adds mask of given shape to the stack of detector masks. The mask value 'true' means
//! that the channel will be excluded from the simulation. The mask which is added last
......@@ -128,7 +129,7 @@ public:
//! Convert an index of the region of interest to an index of the detector.
//! If no region of interest is set, then the index stays unmodified (since ROI == detector
//! area).
size_t regionOfInterestIndexToDetectorIndex(size_t i) const;
size_t roiToFullIndex(size_t i) const;
//! The lower and upper bound of the region of interest. If no region of interest is explicitly
//! defined, then the whole detector is taken as "region of interest".
......@@ -161,7 +162,7 @@ private:
std::unique_ptr<Frame> m_frame;
PolFilter m_polAnalyzer;
std::unique_ptr<IDetectorResolution> m_resolution;
std::unique_ptr<DetectorMask> m_mask;
std::unique_ptr<MaskStack> m_mask;
#endif // SWIG
};
......
......@@ -15,7 +15,7 @@
#include "Device/Detector/SimulationAreaIterator.h"
#include "Base/Util/Assert.h"
#include "Device/Detector/IDetector.h"
#include "Device/Mask/DetectorMask.h"
#include "Device/Mask/MaskStack.h"
SimulationAreaIterator::SimulationAreaIterator(const IDetector* detector, size_t start_at_index)
: m_detector(detector)
......@@ -44,15 +44,12 @@ size_t SimulationAreaIterator::roiIndex() const
size_t SimulationAreaIterator::detectorIndex() const
{
return m_detector->regionOfInterestIndexToDetectorIndex(m_index);
return m_detector->roiToFullIndex(m_index);
}
SimulationAreaIterator& SimulationAreaIterator::operator++()
{
size_t index = nextIndex(m_index);
if (index != m_index)
m_index = index;
m_index = nextIndex(m_index);
return *this;
}
......@@ -76,8 +73,8 @@ size_t SimulationAreaIterator::nextIndex(size_t currentIndex)
bool SimulationAreaIterator::isMasked(size_t index) const
{
const auto* masks = m_detector->detectorMask();
const auto detectorIndex = m_detector->regionOfInterestIndexToDetectorIndex(index);
return masks && masks->isMasked(detectorIndex);
const auto detectorIndex = m_detector->roiToFullIndex(index);
return masks && masks->isMasked(detectorIndex, m_detector->frame());
}
bool SimulationAreaIterator::operator==(const SimulationAreaIterator& other) const
......@@ -85,8 +82,3 @@ bool SimulationAreaIterator::operator==(const SimulationAreaIterator& other) con
ASSERT(m_detector == other.m_detector);
return m_index == other.m_index;
}
bool SimulationAreaIterator::operator!=(const SimulationAreaIterator& right) const
{
return !(*this == right);
}
......@@ -36,10 +36,9 @@ public:
size_t detectorIndex() const;
bool operator==(const SimulationAreaIterator& other) const;
bool operator!=(const SimulationAreaIterator& right) const;
bool operator!=(const SimulationAreaIterator& other) const { return !operator==(other); }
//! prefix increment
SimulationAreaIterator& operator++();
SimulationAreaIterator& operator++(); //!< prefix increment
private:
explicit SimulationAreaIterator(const IDetector* detector, size_t start_at_index);
......
......@@ -2,8 +2,8 @@
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file Device/Mask/DetectorMask.cpp
//! @brief Implements class DetectorMask.
//! @file Device/Mask/MaskStack.cpp
//! @brief Implements class MaskStack.
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
......@@ -12,7 +12,8 @@
//
// ************************************************************************************************
#include "Device/Mask/DetectorMask.h"
#include "Device/Mask/MaskStack.h"
#include "Base/Axis/Frame.h"
#include "Base/Axis/Scale.h"
#include "Device/Data/Datafield.h"
#include "Device/Mask/IShape2D.h"
......@@ -31,67 +32,36 @@ MaskPattern* MaskPattern::clone() const
return new MaskPattern(shape->clone(), doMask);
}
DetectorMask::DetectorMask(const Scale& xAxis, const Scale& yAxis)
: m_xAxis(xAxis.clone())
, m_yAxis(yAxis.clone())
, m_masked(xAxis.size() * yAxis.size(), false)
{
}
DetectorMask::~DetectorMask() = default;
DetectorMask::DetectorMask(const DetectorMask& other)
: m_xAxis(other.m_xAxis->clone())
, m_yAxis(other.m_yAxis->clone())
, m_stack(other.m_stack)
, m_masked(other.m_masked)
{
}
void DetectorMask::addMask(const IShape2D& shape, bool mask_value)
void MaskStack::addMask(const IShape2D& shape, bool mask_value)
{
m_stack.emplace_back(new MaskPattern(shape.clone(), mask_value));
process_masks();
}
bool DetectorMask::isMasked(size_t i_flat) const
bool MaskStack::isMasked(size_t i_flat, const Frame& frame) const
{
return m_masked[i_flat];
size_t nx = frame.projectedSize(0);
Bin1D binx = frame.xAxis().bin(i_flat % nx);
Bin1D biny = frame.yAxis().bin(i_flat / nx);
for (int k = m_stack.size() - 1; k >= 0; --k) {
const MaskPattern* const pat = m_stack[k];
if (pat->shape->contains(binx, biny))
return pat->doMask;
}
return false;
}
bool DetectorMask::hasMasks() const
bool MaskStack::hasMasks() const
{
return !m_stack.empty();
}
size_t DetectorMask::numberOfMasks() const
size_t MaskStack::numberOfMasks() const
{
return m_stack.size();
}
const MaskPattern* DetectorMask::patternAt(size_t iMask) const
const MaskPattern* MaskStack::patternAt(size_t iMask) const
{
return m_stack.at(iMask);
}
void DetectorMask::process_masks()
{
m_masked.clear();
m_masked.resize(m_xAxis->size() * m_yAxis->size(), false);
if (m_stack.empty())
return;
for (size_t i_flat = 0; i_flat < m_masked.size(); ++i_flat) {
Bin1D binx = m_xAxis->bin(i_flat % m_xAxis->size());
Bin1D biny = m_yAxis->bin(i_flat / m_xAxis->size());
// setting mask to the data starting from last shape added
for (int k = m_stack.size() - 1; k >= 0; --k) {
const MaskPattern* const pat = m_stack[k];
if (pat->shape->contains(binx, biny)) {
m_masked[i_flat] = pat->doMask;
break; // i_flat is covered by the shape, stop looking further
}
}
}
}
......@@ -2,8 +2,8 @@
//
// BornAgain: simulate and fit reflection and scattering
//
//! @file Device/Mask/DetectorMask.h
//! @brief Defines class DetectorMask.
//! @file Device/Mask/MaskStack.h
//! @brief Defines class MaskStack.
//!
//! @homepage http://www.bornagainproject.org
//! @license GNU General Public License v3 or higher (see COPYING)
......@@ -15,16 +15,14 @@
#ifdef SWIG
#error no need to expose this header to Swig
#endif
#ifndef BORNAGAIN_DEVICE_MASK_DETECTORMASK_H
#define BORNAGAIN_DEVICE_MASK_DETECTORMASK_H
#include <memory>
#ifndef BORNAGAIN_DEVICE_MASK_MASKSTACK_H
#define BORNAGAIN_DEVICE_MASK_MASKSTACK_H
#include "Base/Types/CloneableVector.h"
#include <memory>
class Datafield;
class IShape2D;
class Scale;
class Frame;
class MaskPattern {
public:
......@@ -38,17 +36,13 @@ public:
//! Collection of detector masks.
class DetectorMask {
class MaskStack {
public:
DetectorMask(const Scale& xAxis, const Scale& yAxis);
~DetectorMask();
DetectorMask(const DetectorMask& other);
//! Add mask to the stack of detector masks.
//! Argument mask_value=true means that the area will be excluded from the analysis.
void addMask(const IShape2D& shape, bool mask_value);
bool isMasked(size_t i_flat) const;
bool isMasked(size_t i_flat, const Frame& frame) const;
//! Returns true if has masks
bool hasMasks() const;
......@@ -58,15 +52,7 @@ public:
const MaskPattern* patternAt(size_t iMask) const;
private:
void process_masks();
//... primary data:
const Scale* m_xAxis;
const Scale* m_yAxis;
CloneableVector<MaskPattern> m_stack;
//... cached secondary data:
std::vector<bool> m_masked;
};
#endif // BORNAGAIN_DEVICE_MASK_DETECTORMASK_H
#endif // BORNAGAIN_DEVICE_MASK_MASKSTACK_H
......@@ -14,8 +14,8 @@
#include "GUI/Model/Data/MaskResultsPresenter.h"
#include "Device/Data/Datafield.h"
#include "Device/Mask/DetectorMask.h"
#include "Device/Mask/IShape2D.h"
#include "Device/Mask/MaskStack.h"
#include "GUI/Model/Data/Data2DItem.h"
#include "GUI/Model/Mask/MaskItems.h"
#include <QVBoxLayout>
......@@ -82,7 +82,7 @@ Datafield* MaskResultsPresenter::createMaskPresentation() const
// Requesting mask information
std::unique_ptr<IShape2D> roi;
Datafield* result = m_data2DItem->c_field()->clone();
DetectorMask detectorMask(result->axis(0), result->axis(1));
MaskStack detectorMask;
const double scale = 1.0;
const QVector<MaskItem*> maskItems = m_data2DItem->maskContainerItem()->maskItems();
for (auto maskIter = maskItems.rbegin(); maskIter != maskItems.rend(); maskIter++)
......@@ -103,7 +103,7 @@ Datafield* MaskResultsPresenter::createMaskPresentation() const
return nullptr;
for (size_t i = 0; i < result->size(); ++i)
if (detectorMask.isMasked(i))
if (detectorMask.isMasked(i, result->frame()))
(*result)[i] = 0.0;
return result;
......
......@@ -17,10 +17,10 @@
#include "Base/Const/Units.h"
#include "Device/Beam/Beam.h"
#include "Device/Detector/OffspecDetector.h"
#include "Device/Mask/DetectorMask.h"
#include "Device/Mask/Ellipse.h"
#include "Device/Mask/InfinitePlane.h"
#include "Device/Mask/Line.h"
#include "Device/Mask/MaskStack.h"
#include "Device/Mask/Polygon.h"
#include "Device/Mask/Rectangle.h"
#include "Device/Resolution/ConvolutionDetectorResolution.h"
......@@ -132,7 +132,7 @@ void setMaskContainer(MaskContainerItem* destMaskItems, const IDetector& detecto
}
}
void setDetectorMasks(DetectorItem* detector_item, const IDetector& detector)
void setMaskStacks(DetectorItem* detector_item, const IDetector& detector)
{
if ((detector.detectorMask() && detector.detectorMask()->hasMasks())
|| detector.hasExplicitRegionOfInterest()) {
......@@ -271,7 +271,7 @@ void updateDetector(GISASInstrumentItem* instrument_item, const FlatDetector& de
auto* detector_item = instrument_item->detectorItem();
setDetectorResolution(detector_item, detector);
setDetectorMasks(detector_item, detector);
setMaskStacks(detector_item, detector);
setPolarizer2(instrument_item, detector.analyzer());
}
......
......@@ -22,7 +22,7 @@
#include "Device/Detector/FlatDetector.h"
#include "Device/Detector/OffspecDetector.h"
#include "Device/Detector/SphericalDetector.h"
#include "Device/Mask/DetectorMask.h"
#include "Device/Mask/MaskStack.h"
#include "Device/Resolution/ConvolutionDetectorResolution.h"
#include "Device/Resolution/ResolutionFunction2DGaussian.h"
#include "Param/Distrib/Distributions.h"
......@@ -175,7 +175,7 @@ std::string defineDetector(const IDetector& detector)
}
//... Mask
const DetectorMask* detectorMask = detector.detectorMask();
const MaskStack* detectorMask = detector.detectorMask();
if (detectorMask && detectorMask->hasMasks()) {
result << "\n";
for (size_t i_mask = 0; i_mask < detectorMask->numberOfMasks(); ++i_mask) {
......
......@@ -24,10 +24,10 @@ TEST(RegionOfInterestTest, constructor)
EXPECT_EQ(detector.sizeOfRegionOfInterest(), 10u);
// converting local roi index to global detector index
EXPECT_EQ(detector.regionOfInterestIndexToDetectorIndex(0), 9);
EXPECT_EQ(detector.regionOfInterestIndexToDetectorIndex(4), 13);
EXPECT_EQ(detector.regionOfInterestIndexToDetectorIndex(5), 17);
EXPECT_EQ(detector.regionOfInterestIndexToDetectorIndex(9), 21);
EXPECT_EQ(detector.roiToFullIndex(0), 9);
EXPECT_EQ(detector.roiToFullIndex(4), 13);
EXPECT_EQ(detector.roiToFullIndex(5), 17);
EXPECT_EQ(detector.roiToFullIndex(9), 21);
}
//! Testing region of interest which is larger than the detector.
......@@ -46,10 +46,10 @@ TEST(RegionOfInterestTest, largeArea)
EXPECT_EQ(detector.sizeOfRegionOfInterest(), 32u);
// converting local roi index to global detector index
EXPECT_EQ(detector.regionOfInterestIndexToDetectorIndex(5), 5u);
EXPECT_EQ(detector.regionOfInterestIndexToDetectorIndex(6), 6u);
EXPECT_EQ(detector.regionOfInterestIndexToDetectorIndex(9), 9u);
EXPECT_EQ(detector.regionOfInterestIndexToDetectorIndex(27), 27u);
EXPECT_EQ(detector.roiToFullIndex(5), 5u);
EXPECT_EQ(detector.roiToFullIndex(6), 6u);
EXPECT_EQ(detector.roiToFullIndex(9), 9u);
EXPECT_EQ(detector.roiToFullIndex(27), 27u);
}
//! Testing clone
......
......@@ -5,7 +5,7 @@
#include "Base/Const/Units.h"
#include "Device/Beam/Beam.h"
#include "Device/Detector/SimulationAreaIterator.h"
#include "Device/Mask/DetectorMask.h"
#include "Device/Mask/MaskStack.h"
#include "Device/Mask/Polygon.h"
#include "Device/Mask/Rectangle.h"
#include "Device/Resolution/ConvolutionDetectorResolution.h"
......
......@@ -2678,8 +2678,12 @@ class IDetector(libBornAgainBase.ICloneable, libBornAgainParam.INode):
r"""nodeChildren(IDetector self) -> std::vector< INode const *,std::allocator< INode const * > >"""
return _libBornAgainDevice.IDetector_nodeChildren(self)
def frame(self):
r"""frame(IDetector self) -> Frame"""
return _libBornAgainDevice.IDetector_frame(self)
def detectorMask(self):
r"""detectorMask(IDetector self) -> DetectorMask const *"""
r"""detectorMask(IDetector self) -> MaskStack const *"""
return _libBornAgainDevice.IDetector_detectorMask(self)
def addMask(self, shape, mask_value=True):
......
......@@ -3390,23 +3390,23 @@ namespace Swig {
#define SWIGTYPE_p_Bin1D swig_types[1]
#define SWIGTYPE_p_Coordinate swig_types[2]
#define SWIGTYPE_p_Datafield swig_types[3]
#define SWIGTYPE_p_DetectorMask swig_types[4]
#define SWIGTYPE_p_Ellipse swig_types[5]
#define SWIGTYPE_p_FlatDetector swig_types[6]
#define SWIGTYPE_p_FootprintGauss swig_types[7]
#define SWIGTYPE_p_FootprintSquare swig_types[8]
#define SWIGTYPE_p_Frame swig_types[9]
#define SWIGTYPE_p_HorizontalLine swig_types[10]
#define SWIGTYPE_p_ICloneable swig_types[11]
#define SWIGTYPE_p_IDetector swig_types[12]
#define SWIGTYPE_p_IDetectorResolution swig_types[13]
#define SWIGTYPE_p_IFootprint swig_types[14]
#define SWIGTYPE_p_INode swig_types[15]
#define SWIGTYPE_p_IPixel swig_types[16]
#define SWIGTYPE_p_IResolutionFunction2D swig_types[17]
#define SWIGTYPE_p_IShape2D swig_types[18]
#define SWIGTYPE_p_ImportSettings1D swig_types[19]
#define SWIGTYPE_p_Line swig_types[20]
#define SWIGTYPE_p_Ellipse swig_types[4]
#define SWIGTYPE_p_FlatDetector swig_types[5]
#define SWIGTYPE_p_FootprintGauss swig_types[6]
#define SWIGTYPE_p_FootprintSquare swig_types[7]
#define SWIGTYPE_p_Frame swig_types[8]
#define SWIGTYPE_p_HorizontalLine swig_types[9]
#define SWIGTYPE_p_ICloneable swig_types[10]
#define SWIGTYPE_p_IDetector swig_types[11]
#define SWIGTYPE_p_IDetectorResolution swig_types[12]
#define SWIGTYPE_p_IFootprint swig_types[13]
#define SWIGTYPE_p_INode swig_types[14]
#define SWIGTYPE_p_IPixel swig_types[15]
#define SWIGTYPE_p_IResolutionFunction2D swig_types[16]
#define SWIGTYPE_p_IShape2D swig_types[17]
#define SWIGTYPE_p_ImportSettings1D swig_types[18]
#define SWIGTYPE_p_Line swig_types[19]
#define SWIGTYPE_p_MaskStack swig_types[20]
#define SWIGTYPE_p_OffspecDetector swig_types[21]
#define SWIGTYPE_p_PolFilter swig_types[22]
#define SWIGTYPE_p_Polygon swig_types[23]
......@@ -35979,13 +35979,46 @@ fail:
}
 
 
SWIGINTERN PyObject *_wrap_IDetector_frame(PyObject *self, PyObject *args) {
PyObject *resultobj = 0;
IDetector *arg1 = (IDetector *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject *swig_obj[1] ;
Frame *result = 0 ;
if (!args) SWIG_fail;
swig_obj[0] = args;
res1 = SWIG_ConvertPtr(swig_obj[0], &argp1,SWIGTYPE_p_IDetector, 0 | 0 );
if (!SWIG_IsOK(res1)) {
SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "IDetector_frame" "', argument " "1"" of type '" "IDetector const *""'");
}
arg1 = reinterpret_cast< IDetector * >(argp1);
{
try {
result = (Frame *) &((IDetector const *)arg1)->frame();
} catch (const std::exception& ex) {
// message shown in the Python interpreter
const std::string msg {
"BornAgain C++ Exception: " + std::string(ex.what())
};
SWIG_exception(SWIG_RuntimeError, msg.c_str());
}
}
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Frame, 0 | 0 );
return resultobj;
fail:
return NULL;
}
SWIGINTERN PyObject *_wrap_IDetector_detectorMask(PyObject *self, PyObject *args) {
PyObject *resultobj = 0;
IDetector *arg1 = (IDetector *) 0 ;
void *argp1 = 0 ;
int res1 = 0 ;
PyObject *swig_obj[1] ;
DetectorMask *result = 0 ;
MaskStack *result = 0 ;
if (!args) SWIG_fail;
swig_obj[0] = args;
......@@ -35996,7 +36029,7 @@ SWIGINTERN PyObject *_wrap_IDetector_detectorMask(PyObject *self, PyObject *args
arg1 = reinterpret_cast< IDetector * >(argp1);
{
try {
result = (DetectorMask *)((IDetector const *)arg1)->detectorMask();
result = (MaskStack *)((IDetector const *)arg1)->detectorMask();
} catch (const std::exception& ex) {
// message shown in the Python interpreter
const std::string msg {
......@@ -36005,7 +36038,7 @@ SWIGINTERN PyObject *_wrap_IDetector_detectorMask(PyObject *self, PyObject *args
SWIG_exception(SWIG_RuntimeError, msg.c_str());
}
}
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_DetectorMask, 0 | 0 );
resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MaskStack, 0 | 0 );
return resultobj;
fail:
return NULL;
......@@ -43690,7 +43723,8 @@ static PyMethodDef SwigMethods[] = {
{ "IDetector_setDetectorResolution", _wrap_IDetector_setDetectorResolution, METH_VARARGS, "IDetector_setDetectorResolution(IDetector self, IDetectorResolution detector_resolution)"},
{ "IDetector_setResolutionFunction", _wrap_IDetector_setResolutionFunction, METH_VARARGS, "IDetector_setResolutionFunction(IDetector self, IResolutionFunction2D resFunc)"},
{ "IDetector_nodeChildren", _wrap_IDetector_nodeChildren, METH_O, "IDetector_nodeChildren(IDetector self) -> std::vector< INode const *,std::allocator< INode const * > >"},
{ "IDetector_detectorMask", _wrap_IDetector_detectorMask, METH_O, "IDetector_detectorMask(IDetector self) -> DetectorMask const *"},
{ "IDetector_frame", _wrap_IDetector_frame, METH_O, "IDetector_frame(IDetector self) -> Frame"},
{ "IDetector_detectorMask", _wrap_IDetector_detectorMask, METH_O, "IDetector_detectorMask(IDetector self) -> MaskStack const *"},
{ "IDetector_addMask", _wrap_IDetector_addMask, METH_VARARGS, "IDetector_addMask(IDetector self, IShape2D shape, bool mask_value=True)"},
{ "IDetector_maskAll", _wrap_IDetector_maskAll, METH_O, "IDetector_maskAll(IDetector self)"},
{ "IDetector_axis", _wrap_IDetector_axis, METH_VARARGS, "IDetector_axis(IDetector self, size_t i) -> Scale"},
......@@ -43922,7 +43956,6 @@ static swig_type_info _swigt__p_Beam = {"_p_Beam", "Beam *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_Bin1D = {"_p_Bin1D", "Bin1D *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_Coordinate = {"_p_Coordinate", "Coordinate *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_Datafield = {"_p_Datafield", "Datafield *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_DetectorMask = {"_p_DetectorMask", "DetectorMask *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_Ellipse = {"_p_Ellipse", "Ellipse *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_FlatDetector = {"_p_FlatDetector", "FlatDetector *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_FootprintGauss = {"_p_FootprintGauss", "FootprintGauss *", 0, 0, (void*)0, 0};
......@@ -43939,6 +43972,7 @@ static swig_type_info _swigt__p_IResolutionFunction2D = {"_p_IResolutionFunction
static swig_type_info _swigt__p_IShape2D = {"_p_IShape2D", "IShape2D *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_ImportSettings1D = {"_p_ImportSettings1D", "ImportSettings1D *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_Line = {"_p_Line", "Line *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_MaskStack = {"_p_MaskStack", "MaskStack *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_OffspecDetector = {"_p_OffspecDetector", "OffspecDetector *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_PolFilter = {"_p_PolFilter", "PolFilter *", 0, 0, (void*)0, 0};
static swig_type_info _swigt__p_Polygon = {"_p_Polygon", "Polygon *", 0, 0, (void*)0, 0};
......@@ -44010,7 +44044,6 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_Bin1D,
&_swigt__p_Coordinate,
&_swigt__p_Datafield,
&_swigt__p_DetectorMask,
&_swigt__p_Ellipse,
&_swigt__p_FlatDetector,
&_swigt__p_FootprintGauss,
......@@ -44027,6 +44060,7 @@ static swig_type_info *swig_type_initial[] = {
&_swigt__p_IShape2D,
&_swigt__p_ImportSettings1D,
&_swigt__p_Line,
&_swigt__p_MaskStack,
&_swigt__p_OffspecDetector,
&_swigt__p_PolFilter,
&_swigt__p_Polygon,
......@@ -44098,7 +44132,6 @@ static swig_cast_info _swigc__p_Beam[] = { {&_swigt__p_Beam, 0, 0, 0},{0, 0, 0,
static swig_cast_info _swigc__p_Bin1D[] = { {&_swigt__p_Bin1D, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_Coordinate[] = { {&_swigt__p_Coordinate, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_Datafield[] = { {&_swigt__p_Datafield, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_DetectorMask[] = { {&_swigt__p_DetectorMask, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_Ellipse[] = { {&_swigt__p_Ellipse, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_FlatDetector[] = { {&_swigt__p_FlatDetector, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_FootprintGauss[] = { {&_swigt__p_FootprintGauss, 0, 0, 0},{0, 0, 0, 0}};
......@@ -44115,6 +44148,7 @@ static swig_cast_info _swigc__p_IResolutionFunction2D[] = { {&_swigt__p_IResolu
static swig_cast_info _swigc__p_IShape2D[] = { {&_swigt__p_IShape2D, 0, 0, 0}, {&_swigt__p_Ellipse, _p_EllipseTo_p_IShape2D, 0, 0}, {&_swigt__p_HorizontalLine, _p_HorizontalLineTo_p_IShape2D, 0, 0}, {&_swigt__p_Line, _p_LineTo_p_IShape2D, 0, 0}, {&_swigt__p_Polygon, _p_PolygonTo_p_IShape2D, 0, 0}, {&_swigt__p_Rectangle, _p_RectangleTo_p_IShape2D, 0, 0}, {&_swigt__p_VerticalLine, _p_VerticalLineTo_p_IShape2D, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_ImportSettings1D[] = { {&_swigt__p_ImportSettings1D, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_Line[] = { {&_swigt__p_Line, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_MaskStack[] = { {&_swigt__p_MaskStack, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_OffspecDetector[] = { {&_swigt__p_OffspecDetector, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_PolFilter[] = { {&_swigt__p_PolFilter, 0, 0, 0},{0, 0, 0, 0}};
static swig_cast_info _swigc__p_Polygon[] = { {&_swigt__p_Polygon, 0, 0, 0},{0, 0, 0, 0}};
......@@ -44186,7 +44220,6 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_Bin1D,
_swigc__p_Coordinate,
_swigc__p_Datafield,
_swigc__p_DetectorMask,
_swigc__p_Ellipse,
_swigc__p_FlatDetector,
_swigc__p_FootprintGauss,
......@@ -44203,6 +44236,7 @@ static swig_cast_info *swig_cast_initial[] = {
_swigc__p_IShape2D,
_swigc__p_ImportSettings1D,
_swigc__p_Line,
_swigc__p_MaskStack,
_swigc__p_OffspecDetector,
_swigc__p_PolFilter,
_swigc__p_Polygon,