19namespace DataObjects {
21#ifndef __INTEL_COMPILER
44 MDGridBox(std::shared_ptr<API::BoxController> &bc,
const uint32_t depth,
65 void setFileBacked(
const uint64_t ,
const size_t ,
const bool )
override;
66 void setFileBacked()
override;
67 void clearFileBacked(
bool loadDiskBackedData)
override;
68 void clear()
override;
79 std::vector<coord_t> & )
override { }
100 size_t getDataInMemorySize()
const override;
102 size_t getNumDims()
const override;
103 size_t getNumMDBoxes()
const override;
104 size_t getNumChildren()
const override;
107 bool isBox()
const override {
return false; }
109 size_t getChildIndexFromID(
size_t childId)
const;
113 void setChildren(
const std::vector<API::IMDNode *> &otherBoxes,
const size_t indexStart,
114 const size_t indexEnd)
override;
116 void getBoxes(std::vector<API::IMDNode *> &outBoxes,
size_t maxDepth,
bool leafOnly)
override;
117 void getBoxes(std::vector<API::IMDNode *> &outBoxes,
size_t maxDepth,
bool leafOnly,
122 void transformDimensions(std::vector<double> &scaling, std::vector<double> &offset)
override;
125 std::vector<MDE> *getEventsCopy()
override;
128 size_t addEvent(
const MDE &event)
override;
129 size_t addEventUnsafe(
const MDE &event)
override;
133 void buildAndAddEvent(
const signal_t Signal,
const signal_t errorSq,
const std::vector<coord_t> &point,
134 uint16_t expInfoIndex, uint16_t goniometerIndex, uint32_t detectorId)
override;
135 void buildAndAddEventUnsafe(
const signal_t Signal,
const signal_t errorSq,
const std::vector<coord_t> &point,
136 uint16_t expInfoIndex, uint16_t goniometerIndex, uint32_t detectorId)
override;
137 size_t buildAndAddEvents(
const std::vector<signal_t> &sigErrSq,
const std::vector<coord_t> &Coord,
138 const std::vector<uint16_t> &expInfoIndex,
const std::vector<uint16_t> &goniometerIndex,
139 const std::vector<uint32_t> &detectorId)
override;
144 const bool useOnePercentBackgroundCorrection =
true)
const override;
150 signal_t &signal,
signal_t &errorSquared, std::vector<signal_t> &signal_fit)
const override;
158 void calculateGridCaches() override final;
160 bool getIsMasked() const override;
162 void mask() override;
164 void unmask() override;
173 throw(std::runtime_error(
"This function should not be called on MDGridBox "
174 "(as its meaning for MDbox is dubious too)"));
180 throw(std::runtime_error(
"This function should not be called on MDGridBox "
181 "(as its meaning for MDbox is dubious too)"));
187 throw(std::runtime_error(
"This function should not be called on MDGridBox "
188 "(as its meaning for MDbox is dubious too)"));
193 using sptr = std::shared_ptr<MDGridBox<MDE, nd>>;
200 size_t calculateChildIndex(
const MDE &event)
const;
206 size_t splitCumul[nd];
209 double m_SubBoxSize[nd];
211 double m_SubBoxSizeInv[nd];
231 size_t getLinearIndex(
size_t *indices)
const;
233 size_t computeSizesFromSplit();
234 void fillBoxShell(
const size_t tot,
const coord_t ChildInverseVolume);
241 size_t initGridBox();
244#ifndef __INTEL_COMPILER
std::map< DeltaEMode::Type, std::string > index
#define TMDE_CLASS
Macro to make declaring template classes faster.
This class is used by MDBox and MDGridBox in order to intelligently determine optimal behavior.
The header describes interface to IO Operations perfomed by the box controller May be replaced by a b...
Templated super-class of a multi-dimensional event "box".
Templated class for a multi-dimensional event "box".
Templated class for a GRIDDED multi-dimensional event "box".
std::vector< MDBoxBase< MDE, nd > * > m_Children
1D array of boxes contained within.
void saveAt(API::IBoxControllerIO *const, uint64_t) const override
Save the box at specific disk position using the class, respoinsible for the file IO.
void loadAndAddFrom(API::IBoxControllerIO *const, uint64_t, size_t, std::vector< coord_t > &) override
Load the box data of specified size from the disk location provided using the class,...
MDGridBox()=default
Private constructor as it does not work without box controller.
coord_t diagonalSquared
Length (squared) of the diagonal through every dimension = sum( boxSize[i]^2 ) Used in some calculati...
Kernel::ISaveable * getISaveable() override
get object responsible for saving the box to a file.
void setNPoints(const uint64_t &n)
std::shared_ptr< MDGridBox< MDE, nd > > sptr
Typedef for a shared pointer to a MDGridBox.
void loadAndAddFrom(API::IBoxControllerIO *const, uint64_t, size_t) override
Load the box data of specified size from the disk location provided using the class,...
size_t nPoints
Cached number of points contained (including all sub-boxes)
coord_t * getCentroid() const override
The function used to satisfy IMDNode interface but the physical meaning is unclear.
bool isBox() const override
to avoid casting (which need also the number of dimensions) method say if Node is a box.
void reserveMemoryForLoad(uint64_t) override
MDGridBox(const MDGridBox< MDE, nd > &box)
private default copy constructor as the only correct constructor is the one with box controller
uint64_t getTotalDataSize() const override
void calculateCentroid(coord_t *, const int) const override
The function used to satisfy IMDNode interface but the physical meaning is unclear.
Kernel::ISaveable * getISaveable() const override
get const object responsible for saving the box to a file.
size_t numBoxes
How many boxes in the boxes vector? This is just to avoid boxes.size() calls.
void calculateCentroid(coord_t *) const override
The function used to satisfy IMDNode interface but the physical meaning is unclear.
std::vector< MDBoxBase< MDE, nd > * > boxVector_t
Typedef for a vector of MDBoxBase pointers.
void clearDataFromMemory() override
uint64_t getNPoints() const override
Uses the cached value of points stored in the grid box.
Simple class that holds the extents (min/max) of a given dimension in a MD workspace or MDBox.
An "ImplicitFunction" defining a hyper-cuboid-shaped region in N dimensions.
An interface for objects that can be cached or saved to disk.
The ThreadScheduler object defines how tasks are allocated to threads and in what order.
void split(const int A, int &S, int &V)
Split a number into the sign and positive value.
Helper class which provides the Collimation Length for SANS instruments.
float coord_t
Typedef for the data type to use for coordinate axes in MD objects such as MDBox, MDEventWorkspace,...
double signal_t
Typedef for the signal recorded in a MDBox, etc.