18namespace DataObjects {
28template <
size_t nd>
class LOOP;
36 enum { MAX_MD_DIMENSIONS_NUM = 9 };
44 MDGridBoxWithLean = 1,
51 size_t nd,
const std::string &eventType =
"MDLeanEvent",
60 const uint32_t depth = 0,
const size_t nBoxEvents =
UNDEF_SIZET,
64 static size_t getMaxNumDim() {
return size_t(MAX_MD_DIMENSIONS_NUM); }
69 const uint32_t,
const size_t,
const size_t);
95 const uint32_t depth,
const size_t nBoxEvents,
const size_t boxID);
99 const uint32_t depth,
const size_t nBoxEvents,
const size_t boxID);
104 const uint32_t depth,
const size_t nBoxEvents = 0,
const size_t boxID = 0);
109 const uint32_t depth,
const size_t nBoxEvents = 0,
const size_t boxID = 0);
113 const uint32_t,
const size_t,
const size_t);
116 template <
size_t nd>
friend class LOOP;
135#define CALL_MDEVENT_FUNCTION(funcname, workspace) \
137 MDEventWorkspace<MDLeanEvent<1>, 1>::sptr MDEW_MDLEANEVENT_1 = \
138 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<1>, 1>>(workspace); \
139 if (MDEW_MDLEANEVENT_1) \
140 funcname<MDLeanEvent<1>, 1>(MDEW_MDLEANEVENT_1); \
141 MDEventWorkspace<MDLeanEvent<2>, 2>::sptr MDEW_MDLEANEVENT_2 = \
142 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<2>, 2>>(workspace); \
143 if (MDEW_MDLEANEVENT_2) \
144 funcname<MDLeanEvent<2>, 2>(MDEW_MDLEANEVENT_2); \
145 MDEventWorkspace<MDLeanEvent<3>, 3>::sptr MDEW_MDLEANEVENT_3 = \
146 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<3>, 3>>(workspace); \
147 if (MDEW_MDLEANEVENT_3) \
148 funcname<MDLeanEvent<3>, 3>(MDEW_MDLEANEVENT_3); \
149 MDEventWorkspace<MDLeanEvent<4>, 4>::sptr MDEW_MDLEANEVENT_4 = \
150 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<4>, 4>>(workspace); \
151 if (MDEW_MDLEANEVENT_4) \
152 funcname<MDLeanEvent<4>, 4>(MDEW_MDLEANEVENT_4); \
153 MDEventWorkspace<MDLeanEvent<5>, 5>::sptr MDEW_MDLEANEVENT_5 = \
154 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<5>, 5>>(workspace); \
155 if (MDEW_MDLEANEVENT_5) \
156 funcname<MDLeanEvent<5>, 5>(MDEW_MDLEANEVENT_5); \
157 MDEventWorkspace<MDLeanEvent<6>, 6>::sptr MDEW_MDLEANEVENT_6 = \
158 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<6>, 6>>(workspace); \
159 if (MDEW_MDLEANEVENT_6) \
160 funcname<MDLeanEvent<6>, 6>(MDEW_MDLEANEVENT_6); \
161 MDEventWorkspace<MDLeanEvent<7>, 7>::sptr MDEW_MDLEANEVENT_7 = \
162 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<7>, 7>>(workspace); \
163 if (MDEW_MDLEANEVENT_7) \
164 funcname<MDLeanEvent<7>, 7>(MDEW_MDLEANEVENT_7); \
165 MDEventWorkspace<MDLeanEvent<8>, 8>::sptr MDEW_MDLEANEVENT_8 = \
166 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<8>, 8>>(workspace); \
167 if (MDEW_MDLEANEVENT_8) \
168 funcname<MDLeanEvent<8>, 8>(MDEW_MDLEANEVENT_8); \
169 MDEventWorkspace<MDLeanEvent<9>, 9>::sptr MDEW_MDLEANEVENT_9 = \
170 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<9>, 9>>(workspace); \
171 if (MDEW_MDLEANEVENT_9) \
172 funcname<MDLeanEvent<9>, 9>(MDEW_MDLEANEVENT_9); \
173 MDEventWorkspace<MDEvent<1>, 1>::sptr MDEW_MDEVENT_1 = \
174 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<1>, 1>>(workspace); \
175 if (MDEW_MDEVENT_1) \
176 funcname<MDEvent<1>, 1>(MDEW_MDEVENT_1); \
177 MDEventWorkspace<MDEvent<2>, 2>::sptr MDEW_MDEVENT_2 = \
178 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<2>, 2>>(workspace); \
179 if (MDEW_MDEVENT_2) \
180 funcname<MDEvent<2>, 2>(MDEW_MDEVENT_2); \
181 MDEventWorkspace<MDEvent<3>, 3>::sptr MDEW_MDEVENT_3 = \
182 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<3>, 3>>(workspace); \
183 if (MDEW_MDEVENT_3) \
184 funcname<MDEvent<3>, 3>(MDEW_MDEVENT_3); \
185 MDEventWorkspace<MDEvent<4>, 4>::sptr MDEW_MDEVENT_4 = \
186 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<4>, 4>>(workspace); \
187 if (MDEW_MDEVENT_4) \
188 funcname<MDEvent<4>, 4>(MDEW_MDEVENT_4); \
189 MDEventWorkspace<MDEvent<5>, 5>::sptr MDEW_MDEVENT_5 = \
190 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<5>, 5>>(workspace); \
191 if (MDEW_MDEVENT_5) \
192 funcname<MDEvent<5>, 5>(MDEW_MDEVENT_5); \
193 MDEventWorkspace<MDEvent<6>, 6>::sptr MDEW_MDEVENT_6 = \
194 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<6>, 6>>(workspace); \
195 if (MDEW_MDEVENT_6) \
196 funcname<MDEvent<6>, 6>(MDEW_MDEVENT_6); \
197 MDEventWorkspace<MDEvent<7>, 7>::sptr MDEW_MDEVENT_7 = \
198 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<7>, 7>>(workspace); \
199 if (MDEW_MDEVENT_7) \
200 funcname<MDEvent<7>, 7>(MDEW_MDEVENT_7); \
201 MDEventWorkspace<MDEvent<8>, 8>::sptr MDEW_MDEVENT_8 = \
202 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<8>, 8>>(workspace); \
203 if (MDEW_MDEVENT_8) \
204 funcname<MDEvent<8>, 8>(MDEW_MDEVENT_8); \
205 MDEventWorkspace<MDEvent<9>, 9>::sptr MDEW_MDEVENT_9 = \
206 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<9>, 9>>(workspace); \
207 if (MDEW_MDEVENT_9) \
208 funcname<MDEvent<9>, 9>(MDEW_MDEVENT_9); \
218#define CALL_MDEVENT_FUNCTION3(funcname, workspace) \
220 MDEventWorkspace<MDLeanEvent<3>, 3>::sptr MDEW_MDLEANEVENT_3 = \
221 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<3>, 3>>(workspace); \
222 if (MDEW_MDLEANEVENT_3) \
223 funcname<MDLeanEvent<3>, 3>(MDEW_MDLEANEVENT_3); \
224 MDEventWorkspace<MDLeanEvent<4>, 4>::sptr MDEW_MDLEANEVENT_4 = \
225 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<4>, 4>>(workspace); \
226 if (MDEW_MDLEANEVENT_4) \
227 funcname<MDLeanEvent<4>, 4>(MDEW_MDLEANEVENT_4); \
228 MDEventWorkspace<MDLeanEvent<5>, 5>::sptr MDEW_MDLEANEVENT_5 = \
229 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<5>, 5>>(workspace); \
230 if (MDEW_MDLEANEVENT_5) \
231 funcname<MDLeanEvent<5>, 5>(MDEW_MDLEANEVENT_5); \
232 MDEventWorkspace<MDLeanEvent<6>, 6>::sptr MDEW_MDLEANEVENT_6 = \
233 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<6>, 6>>(workspace); \
234 if (MDEW_MDLEANEVENT_6) \
235 funcname<MDLeanEvent<6>, 6>(MDEW_MDLEANEVENT_6); \
236 MDEventWorkspace<MDLeanEvent<7>, 7>::sptr MDEW_MDLEANEVENT_7 = \
237 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<7>, 7>>(workspace); \
238 if (MDEW_MDLEANEVENT_7) \
239 funcname<MDLeanEvent<7>, 7>(MDEW_MDLEANEVENT_7); \
240 MDEventWorkspace<MDLeanEvent<8>, 8>::sptr MDEW_MDLEANEVENT_8 = \
241 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<8>, 8>>(workspace); \
242 if (MDEW_MDLEANEVENT_8) \
243 funcname<MDLeanEvent<8>, 8>(MDEW_MDLEANEVENT_8); \
244 MDEventWorkspace<MDLeanEvent<9>, 9>::sptr MDEW_MDLEANEVENT_9 = \
245 std::dynamic_pointer_cast<MDEventWorkspace<MDLeanEvent<9>, 9>>(workspace); \
246 if (MDEW_MDLEANEVENT_9) \
247 funcname<MDLeanEvent<9>, 9>(MDEW_MDLEANEVENT_9); \
248 MDEventWorkspace<MDEvent<3>, 3>::sptr MDEW_MDEVENT_3 = \
249 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<3>, 3>>(workspace); \
250 if (MDEW_MDEVENT_3) \
251 funcname<MDEvent<3>, 3>(MDEW_MDEVENT_3); \
252 MDEventWorkspace<MDEvent<4>, 4>::sptr MDEW_MDEVENT_4 = \
253 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<4>, 4>>(workspace); \
254 if (MDEW_MDEVENT_4) \
255 funcname<MDEvent<4>, 4>(MDEW_MDEVENT_4); \
256 MDEventWorkspace<MDEvent<5>, 5>::sptr MDEW_MDEVENT_5 = \
257 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<5>, 5>>(workspace); \
258 if (MDEW_MDEVENT_5) \
259 funcname<MDEvent<5>, 5>(MDEW_MDEVENT_5); \
260 MDEventWorkspace<MDEvent<6>, 6>::sptr MDEW_MDEVENT_6 = \
261 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<6>, 6>>(workspace); \
262 if (MDEW_MDEVENT_6) \
263 funcname<MDEvent<6>, 6>(MDEW_MDEVENT_6); \
264 MDEventWorkspace<MDEvent<7>, 7>::sptr MDEW_MDEVENT_7 = \
265 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<7>, 7>>(workspace); \
266 if (MDEW_MDEVENT_7) \
267 funcname<MDEvent<7>, 7>(MDEW_MDEVENT_7); \
268 MDEventWorkspace<MDEvent<8>, 8>::sptr MDEW_MDEVENT_8 = \
269 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<8>, 8>>(workspace); \
270 if (MDEW_MDEVENT_8) \
271 funcname<MDEvent<8>, 8>(MDEW_MDEVENT_8); \
272 MDEventWorkspace<MDEvent<9>, 9>::sptr MDEW_MDEVENT_9 = \
273 std::dynamic_pointer_cast<MDEventWorkspace<MDEvent<9>, 9>>(workspace); \
274 if (MDEW_MDEVENT_9) \
275 funcname<MDEvent<9>, 9>(MDEW_MDEVENT_9); \
285#define CONST_CALL_MDEVENT_FUNCTION(funcname, workspace) \
287 const MDEventWorkspace<MDLeanEvent<1>, 1>::sptr CONST_MDEW_MDLEANEVENT_1 = \
288 std::dynamic_pointer_cast<const MDEventWorkspace<MDLeanEvent<1>, 1>>(workspace); \
289 if (CONST_MDEW_MDLEANEVENT_1) \
290 funcname<MDLeanEvent<1>, 1>(CONST_MDEW_MDLEANEVENT_1); \
291 const MDEventWorkspace<MDLeanEvent<2>, 2>::sptr CONST_MDEW_MDLEANEVENT_2 = \
292 std::dynamic_pointer_cast<const MDEventWorkspace<MDLeanEvent<2>, 2>>(workspace); \
293 if (CONST_MDEW_MDLEANEVENT_2) \
294 funcname<MDLeanEvent<2>, 2>(CONST_MDEW_MDLEANEVENT_2); \
295 const MDEventWorkspace<MDLeanEvent<3>, 3>::sptr CONST_MDEW_MDLEANEVENT_3 = \
296 std::dynamic_pointer_cast<const MDEventWorkspace<MDLeanEvent<3>, 3>>(workspace); \
297 if (CONST_MDEW_MDLEANEVENT_3) \
298 funcname<MDLeanEvent<3>, 3>(CONST_MDEW_MDLEANEVENT_3); \
299 const MDEventWorkspace<MDLeanEvent<4>, 4>::sptr CONST_MDEW_MDLEANEVENT_4 = \
300 std::dynamic_pointer_cast<const MDEventWorkspace<MDLeanEvent<4>, 4>>(workspace); \
301 if (CONST_MDEW_MDLEANEVENT_4) \
302 funcname<MDLeanEvent<4>, 4>(CONST_MDEW_MDLEANEVENT_4); \
303 const MDEventWorkspace<MDLeanEvent<5>, 5>::sptr CONST_MDEW_MDLEANEVENT_5 = \
304 std::dynamic_pointer_cast<const MDEventWorkspace<MDLeanEvent<5>, 5>>(workspace); \
305 if (CONST_MDEW_MDLEANEVENT_5) \
306 funcname<MDLeanEvent<5>, 5>(CONST_MDEW_MDLEANEVENT_5); \
307 const MDEventWorkspace<MDLeanEvent<6>, 6>::sptr CONST_MDEW_MDLEANEVENT_6 = \
308 std::dynamic_pointer_cast<const MDEventWorkspace<MDLeanEvent<6>, 6>>(workspace); \
309 if (CONST_MDEW_MDLEANEVENT_6) \
310 funcname<MDLeanEvent<6>, 6>(CONST_MDEW_MDLEANEVENT_6); \
311 const MDEventWorkspace<MDLeanEvent<7>, 7>::sptr CONST_MDEW_MDLEANEVENT_7 = \
312 std::dynamic_pointer_cast<const MDEventWorkspace<MDLeanEvent<7>, 7>>(workspace); \
313 if (CONST_MDEW_MDLEANEVENT_7) \
314 funcname<MDLeanEvent<7>, 7>(CONST_MDEW_MDLEANEVENT_7); \
315 const MDEventWorkspace<MDLeanEvent<8>, 8>::sptr CONST_MDEW_MDLEANEVENT_8 = \
316 std::dynamic_pointer_cast<const MDEventWorkspace<MDLeanEvent<8>, 8>>(workspace); \
317 if (CONST_MDEW_MDLEANEVENT_8) \
318 funcname<MDLeanEvent<8>, 8>(CONST_MDEW_MDLEANEVENT_8); \
319 const MDEventWorkspace<MDLeanEvent<9>, 9>::sptr CONST_MDEW_MDLEANEVENT_9 = \
320 std::dynamic_pointer_cast<const MDEventWorkspace<MDLeanEvent<9>, 9>>(workspace); \
321 if (CONST_MDEW_MDLEANEVENT_9) \
322 funcname<MDLeanEvent<9>, 9>(CONST_MDEW_MDLEANEVENT_9); \
323 const MDEventWorkspace<MDEvent<1>, 1>::sptr CONST_MDEW_MDEVENT_1 = \
324 std::dynamic_pointer_cast<const MDEventWorkspace<MDEvent<1>, 1>>(workspace); \
325 if (CONST_MDEW_MDEVENT_1) \
326 funcname<MDEvent<1>, 1>(CONST_MDEW_MDEVENT_1); \
327 const MDEventWorkspace<MDEvent<2>, 2>::sptr CONST_MDEW_MDEVENT_2 = \
328 std::dynamic_pointer_cast<const MDEventWorkspace<MDEvent<2>, 2>>(workspace); \
329 if (CONST_MDEW_MDEVENT_2) \
330 funcname<MDEvent<2>, 2>(CONST_MDEW_MDEVENT_2); \
331 const MDEventWorkspace<MDEvent<3>, 3>::sptr CONST_MDEW_MDEVENT_3 = \
332 std::dynamic_pointer_cast<const MDEventWorkspace<MDEvent<3>, 3>>(workspace); \
333 if (CONST_MDEW_MDEVENT_3) \
334 funcname<MDEvent<3>, 3>(CONST_MDEW_MDEVENT_3); \
335 const MDEventWorkspace<MDEvent<4>, 4>::sptr CONST_MDEW_MDEVENT_4 = \
336 std::dynamic_pointer_cast<const MDEventWorkspace<MDEvent<4>, 4>>(workspace); \
337 if (CONST_MDEW_MDEVENT_4) \
338 funcname<MDEvent<4>, 4>(CONST_MDEW_MDEVENT_4); \
339 const MDEventWorkspace<MDEvent<5>, 5>::sptr CONST_MDEW_MDEVENT_5 = \
340 std::dynamic_pointer_cast<const MDEventWorkspace<MDEvent<5>, 5>>(workspace); \
341 if (CONST_MDEW_MDEVENT_5) \
342 funcname<MDEvent<5>, 5>(CONST_MDEW_MDEVENT_5); \
343 const MDEventWorkspace<MDEvent<6>, 6>::sptr CONST_MDEW_MDEVENT_6 = \
344 std::dynamic_pointer_cast<const MDEventWorkspace<MDEvent<6>, 6>>(workspace); \
345 if (CONST_MDEW_MDEVENT_6) \
346 funcname<MDEvent<6>, 6>(CONST_MDEW_MDEVENT_6); \
347 const MDEventWorkspace<MDEvent<7>, 7>::sptr CONST_MDEW_MDEVENT_7 = \
348 std::dynamic_pointer_cast<const MDEventWorkspace<MDEvent<7>, 7>>(workspace); \
349 if (CONST_MDEW_MDEVENT_7) \
350 funcname<MDEvent<7>, 7>(CONST_MDEW_MDEVENT_7); \
351 const MDEventWorkspace<MDEvent<8>, 8>::sptr CONST_MDEW_MDEVENT_8 = \
352 std::dynamic_pointer_cast<const MDEventWorkspace<MDEvent<8>, 8>>(workspace); \
353 if (CONST_MDEW_MDEVENT_8) \
354 funcname<MDEvent<8>, 8>(CONST_MDEW_MDEVENT_8); \
355 const MDEventWorkspace<MDEvent<9>, 9>::sptr CONST_MDEW_MDEVENT_9 = \
356 std::dynamic_pointer_cast<const MDEventWorkspace<MDEvent<9>, 9>>(workspace); \
357 if (CONST_MDEW_MDEVENT_9) \
358 funcname<MDEvent<9>, 9>(CONST_MDEW_MDEVENT_9); \
This class is used by MDBox and MDGridBox in order to intelligently determine optimal behavior.
Abstract base class for multi-dimension event workspaces (MDEventWorkspace).
MDEventFactory : collection of methods to create MDLeanEvent* instances, by specifying the number of ...
Templated super-class of a multi-dimensional event "box".
Templated class for a multi-dimensional event "box".
API::IMDNode *(*)(API::BoxController *, const std::vector< Mantid::Geometry::MDDimensionExtents< coord_t > > &, const uint32_t, const size_t, const size_t) fpCreateBox
static LOOP< MAX_MD_DIMENSIONS_NUM > CODE_GENERATOR
BoxType
enum defines fifferent box types generated by createBox factory We will use typecast from integer to ...
static std::vector< fpCreateMDWS > wsCreatorFP
static size_t getMaxNumDim()
Returns max number of MD dimensions allowed by current Mantid version.
API::IMDEventWorkspace *(*)(const std::string &, const Mantid::API::MDNormalization &, const Mantid::API::MDNormalization &) fpCreateMDWS
static std::vector< fpCreateBox > boxCreatorFP
static vector, conaining the pointers to the functions creating MD boxes
Templated class for the multi-dimensional event workspace.
Templated class for a GRIDDED multi-dimensional event "box".
Simple class that holds the extents (min/max) of a given dimension in a MD workspace or MDBox.
std::shared_ptr< IMDEventWorkspace > IMDEventWorkspace_sptr
Shared pointer to Mantid::API::IMDEventWorkspace.
std::shared_ptr< BoxController > BoxController_sptr
Shared ptr to BoxController.
MDNormalization
Enum describing different ways to normalize the signal in a MDWorkspace.
@ VolumeNormalization
Divide the signal by the volume of the box/bin.
Helper class which provides the Collimation Length for SANS instruments.