66 EventList(
const std::vector<Types::Event::TofEvent> &events);
68 EventList(
const std::vector<WeightedEvent> &events);
70 EventList(
const std::vector<WeightedEventNoTime> &events);
74 void copyDataFrom(
const ISpectrum &source)
override;
76 void createFromHistogram(
const ISpectrum *inSpec,
bool GenerateZeros,
bool GenerateMultipleEvents,
97 bool equals(
const EventList &
rhs,
const double tolTof,
const double tolWeight,
const int64_t tolPulse)
const;
107 this->events->emplace_back(event);
118 this->weightedEvents->emplace_back(event);
129 this->weightedEventsNoTime->emplace_back(event);
140 std::vector<Types::Event::TofEvent> &getEvents();
141 const std::vector<Types::Event::TofEvent> &getEvents()
const;
143 std::vector<WeightedEvent> &getWeightedEvents();
144 const std::vector<WeightedEvent> &getWeightedEvents()
const;
146 std::vector<WeightedEventNoTime> &getWeightedEventsNoTime();
147 const std::vector<WeightedEventNoTime> &getWeightedEventsNoTime()
const;
149 void clear(
const bool removeDetIDs =
true)
override;
154 void clearData()
override;
156 void reserve(
size_t num)
override;
162 void sortTof()
const;
164 void sortPulseTime()
const;
165 void sortPulseTimeTOF()
const;
166 void sortTimeAtSample(
const double &tofFactor,
const double &tofShift,
bool forceResort =
false)
const;
168 bool isSortedByTof()
const override;
173 [[deprecated(
"use setSharedX() instead")]]
175 [[deprecated(
"use mutableX() instead")]]
177 [[deprecated(
"use x() instead")]]
179 [[deprecated(
"use x() instead")]]
181 [[deprecated(
"use sharedX() instead")]]
184 [[deprecated(
"use mutableDx() instead")]]
186 [[deprecated(
"use dx() instead")]]
187 const MantidVec &dataDx()
const override;
188 [[deprecated(
"use dx() instead")]]
189 const MantidVec &readDx()
const override;
193 [[deprecated(
"use mutableY() instead")]]
195 throw std::runtime_error(
"EventList: non-const access to Y data is not possible.");
199 [[deprecated(
"use mutableE() instead")]]
201 throw std::runtime_error(
"EventList: non-const access to E data is not possible.");
207 [[deprecated(
"use y() instead")]]
211 [[deprecated(
"use e() instead")]]
217 std::size_t getNumberEvents()
const override;
220 size_t getMemorySize()
const override;
222 virtual size_t histogram_size()
const;
226 const std::shared_ptr<std::vector<double>> histogram_bin_edges);
227 void compressFatEvents(
const double tolerance,
const Types::Core::DateAndTime &timeStart,
const double seconds,
230 void generateHistogram(std::span<double const> X,
MantidVec &Y,
MantidVec &E,
bool skipError =
false)
const override;
231 void generateHistogram(
const double step, std::span<double const> X,
MantidVec &Y,
MantidVec &E,
232 bool skipError =
false)
const;
233 void generateHistogramPulseTime(std::span<double const> X,
MantidVec &Y,
MantidVec &E,
234 bool skipError =
false)
const override;
236 void generateHistogramTimeAtSample(std::span<double const> X,
MantidVec &Y,
MantidVec &E,
const double &tofFactor,
237 const double &tofOffset,
bool skipError =
false)
const override;
239 void integrate(
const double minX,
const double maxX,
const bool entireRange,
double &sum,
double &
error)
const;
241 double integrate(
const double minX,
const double maxX,
const bool entireRange)
const override;
243 void convertTof(std::function<
double(
double)> func,
const int sorting = 0)
override;
245 void convertTof(
const double factor,
const double offset = 0.)
override;
247 void scaleTof(
const double factor)
override;
249 void addTof(
const double offset)
override;
251 void addPulsetime(
const double seconds)
override;
253 void addPulsetimes(
const std::vector<double> &seconds)
override;
255 void maskTof(
const double tofMin,
const double tofMax)
override;
256 void maskCondition(
const std::vector<bool> &mask)
override;
258 void getTofs(std::vector<double> &tofs)
const override;
259 double getTofMin()
const override;
260 double getTofMax()
const override;
261 Mantid::Types::Core::DateAndTime getPulseTimeMax()
const override;
262 Mantid::Types::Core::DateAndTime getPulseTimeMin()
const override;
263 void getPulseTimeMinMax(Mantid::Types::Core::DateAndTime &tMin, Mantid::Types::Core::DateAndTime &tM)
const;
264 Mantid::Types::Core::DateAndTime getTimeAtSampleMax(
const double &tofFactor,
const double &tofOffset)
const override;
265 Mantid::Types::Core::DateAndTime getTimeAtSampleMin(
const double &tofFactor,
const double &tofOffset)
const override;
267 std::vector<double> getTofs()
const override;
270 std::vector<double> getWeights()
const override;
272 void getWeights(std::vector<double> &weights)
const override;
275 std::vector<double> getWeightErrors()
const override;
277 void getWeightErrors(std::vector<double> &weightErrors)
const override;
279 std::vector<Types::Core::DateAndTime> getPulseTimes()
const override;
282 std::vector<Types::Core::DateAndTime> getPulseTOFTimes()
const;
285 std::vector<Types::Core::DateAndTime> getPulseTOFTimesAtSample(
const double &factor,
const double &shift)
const;
287 void setTofs(
const MantidVec &tofs)
override;
291 void filterByPulseTime(Types::Core::DateAndTime start, Types::Core::DateAndTime stop,
EventList &output)
const;
298 void initializePartials(std::map<int, EventList *> partials)
const;
300 void multiply(
const double value,
const double error = 0.0)
override;
303 void multiply(std::span<double const> X, std::span<double const> Y, std::span<double const> E)
override;
305 void divide(
const double value,
const double error = 0.0)
override;
308 void divide(std::span<double const> X, std::span<double const> Y, std::span<double const> E)
override;
311 void convertUnitsQuickly(
const double &factor,
const double &power);
314 HistogramData::Histogram getHistogram()
const;
317 HistogramData::Histogram histogram()
const override;
318 HistogramData::Counts counts()
const override;
319 HistogramData::CountVariances countVariances()
const override;
320 HistogramData::CountStandardDeviations countStandardDeviations()
const override;
321 HistogramData::Frequencies frequencies()
const override;
322 HistogramData::FrequencyVariances frequencyVariances()
const override;
323 HistogramData::FrequencyStandardDeviations frequencyStandardDeviations()
const override;
324 const HistogramData::HistogramY &
y()
const override;
325 const HistogramData::HistogramE &e()
const override;
329 void generateCountsHistogramPulseTime(
const double &xMin,
const double &xMax,
MantidVec &Y,
330 const double TofMin = std::numeric_limits<double>::lowest(),
331 const double TofMax = std::numeric_limits<double>::max())
const;
334 void checkAndSanitizeHistogram(HistogramData::Histogram &histogram)
override;
335 void checkWorksWithPoints()
const override;
336 void checkIsYAndEWritable()
const override;
339 using ISpectrum::copyDataInto;
340 void copyDataInto(
EventList &sink)
const override;
341 void copyDataInto(
Histogram1D &sink)
const override;
343 const HistogramData::Histogram &
histogramRef()
const override {
return m_histogram; }
344 HistogramData::Histogram &mutableHistogramRef()
override;
350 mutable std::unique_ptr<std::vector<Types::Event::TofEvent>>
events;
371 static typename std::vector<T>::const_iterator findFirstPulseEvent(
const std::vector<T> &events,
372 const double seek_pulsetime);
375 typename std::vector<T>::const_iterator findFirstTimeAtSampleEvent(
const std::vector<T> &events,
376 const double seek_time,
const double &tofFactor,
377 const double &tofOffset)
const;
379 void generateCountsHistogram(std::span<double const> X,
MantidVec &Y)
const;
380 void generateCountsHistogram(
const double step, std::span<double const> X,
MantidVec &Y)
const;
383 static std::optional<size_t> findLinearBin(std::span<double const> X,
const double tof,
const double divisor,
384 const double offset,
const bool findExact =
true);
385 static std::optional<size_t> findLogBin(std::span<double const> X,
const double tof,
const double divisor,
386 const double offset,
const bool findExact =
true);
389 static size_t findExactBin(std::span<double const> X,
const double tof,
const size_t n_bin);
391 void generateCountsHistogramPulseTime(std::span<double const> X,
MantidVec &Y)
const;
393 void generateCountsHistogramTimeAtSample(std::span<double const> X,
MantidVec &Y,
const double &tofFactor,
394 const double &tofOffset)
const;
396 void generateErrorsHistogram(std::span<double const> Y,
MantidVec &E)
const;
398 void switchToWeightedEvents();
399 void switchToWeightedEventsNoTime();
401 void sortPulseTimeTOFDelta(
const Types::Core::DateAndTime &start,
const double seconds)
const;
404 template <
class T1,
class T2>
static void minusHelper(std::vector<T1> &events,
const std::vector<T2> &more_events);
406 static void compressEventsHelper(
const std::vector<T> &events, std::vector<WeightedEventNoTime> &out,
410 static void createWeightedEvents(std::vector<WeightedEventNoTime> &out,
const std::vector<double> &tof,
411 const std::vector<T> &weight,
const std::vector<T> &
error);
414 static void processWeightedEvents(
const std::vector<T> &events, std::vector<WeightedEventNoTime> &out,
415 const std::shared_ptr<std::vector<double>> histogram_bin_edges,
420 const double tolerance,
const Mantid::Types::Core::DateAndTime &timeStart,
421 const double seconds);
424 static void histogramForWeightsHelper(
const std::vector<T> &events, std::span<double const> X,
MantidVec &Y,
427 static void histogramForWeightsHelper(
const std::vector<T> &events,
const double step, std::span<double const> X,
430 static void integrateHelper(std::vector<T> &events,
const double minX,
const double maxX,
const bool entireRange,
431 double &sum,
double &
error);
432 template <
class T>
void convertTofHelper(std::vector<T> &events,
const std::function<
double(
double)> &func);
434 template <
class T>
void convertTofHelper(std::vector<T> &events,
const double factor,
const double offset);
435 template <
class T>
void addPulsetimeHelper(std::vector<T> &events,
const double seconds);
436 template <
class T>
void addPulsetimesHelper(std::vector<T> &events,
const std::vector<double> &seconds);
437 template <
class T>
static std::size_t maskTofHelper(std::vector<T> &events,
const double tofMin,
const double tofMax);
438 template <
class T>
static std::size_t maskConditionHelper(std::vector<T> &events,
const std::vector<bool> &mask);
440 template <
class T>
static void getTofsHelper(
const std::vector<T> &events, std::vector<double> &tofs);
441 template <
class T>
static void getWeightsHelper(
const std::vector<T> &events, std::vector<double> &weights);
442 template <
class T>
static void getWeightErrorsHelper(
const std::vector<T> &events, std::vector<double> &weightErrors);
445 template <
typename UnaryOperation>
448 template <
class T>
static void setTofsHelper(std::vector<T> &events,
const std::vector<double> &tofs);
451 Types::Core::DateAndTime stop, std::vector<T> &output);
454 static void filterByTimeROIHelper(std::vector<T> &events,
const std::vector<Kernel::TimeInterval> &intervals,
457 template <
class T>
void filterInPlaceHelper(
Kernel::TimeROI const *timeRoi,
typename std::vector<T> &events);
459 template <
class T>
static void multiplyHelper(std::vector<T> &events,
const double value,
const double error = 0.0);
461 static void multiplyHistogramHelper(std::vector<T> &events, std::span<double const> X, std::span<double const> Y,
462 std::span<double const> E);
464 static void divideHistogramHelper(std::vector<T> &events, std::span<double const> X, std::span<double const> Y,
465 std::span<double const> E);
467 void convertUnitsViaTofHelper(
typename std::vector<T> &events,
Mantid::Kernel::Unit const *fromUnit,
470 void convertUnitsQuicklyHelper(
typename std::vector<T> &events,
const double &factor,
const double &power);