65 EventList(
const std::vector<Types::Event::TofEvent> &events);
67 EventList(
const std::vector<WeightedEvent> &events);
69 EventList(
const std::vector<WeightedEventNoTime> &events);
73 void copyDataFrom(
const ISpectrum &source)
override;
75 void createFromHistogram(
const ISpectrum *inSpec,
bool GenerateZeros,
bool GenerateMultipleEvents,
96 bool equals(
const EventList &
rhs,
const double tolTof,
const double tolWeight,
const int64_t tolPulse)
const;
106 this->events->emplace_back(event);
117 this->weightedEvents->emplace_back(event);
128 this->weightedEventsNoTime->emplace_back(event);
139 std::vector<Types::Event::TofEvent> &getEvents();
140 const std::vector<Types::Event::TofEvent> &getEvents()
const;
142 std::vector<WeightedEvent> &getWeightedEvents();
143 const std::vector<WeightedEvent> &getWeightedEvents()
const;
145 std::vector<WeightedEventNoTime> &getWeightedEventsNoTime();
146 const std::vector<WeightedEventNoTime> &getWeightedEventsNoTime()
const;
148 void clear(
const bool removeDetIDs =
true)
override;
153 void clearData()
override;
155 void reserve(
size_t num)
override;
161 void sortTof()
const;
163 void sortPulseTime()
const;
164 void sortPulseTimeTOF()
const;
165 void sortTimeAtSample(
const double &tofFactor,
const double &tofShift,
bool forceResort =
false)
const;
167 bool isSortedByTof()
const override;
179 const MantidVec &dataDx()
const override;
180 const MantidVec &readDx()
const override;
184 MantidVec &
dataY()
override {
throw std::runtime_error(
"EventList: non-const access to Y data is not possible."); }
187 MantidVec &
dataE()
override {
throw std::runtime_error(
"EventList: non-const access to E data is not possible."); }
200 std::size_t getNumberEvents()
const override;
203 size_t getMemorySize()
const override;
205 virtual size_t histogram_size()
const;
209 const std::shared_ptr<std::vector<double>> histogram_bin_edges);
210 void compressFatEvents(
const double tolerance,
const Types::Core::DateAndTime &timeStart,
const double seconds,
215 bool skipError =
false)
const;
217 bool skipError =
false)
const override;
220 const double &tofOffset,
bool skipError =
false)
const override;
222 void integrate(
const double minX,
const double maxX,
const bool entireRange,
double &sum,
double &
error)
const;
224 double integrate(
const double minX,
const double maxX,
const bool entireRange)
const override;
226 void convertTof(std::function<
double(
double)> func,
const int sorting = 0)
override;
228 void convertTof(
const double factor,
const double offset = 0.)
override;
230 void scaleTof(
const double factor)
override;
232 void addTof(
const double offset)
override;
234 void addPulsetime(
const double seconds)
override;
236 void addPulsetimes(
const std::vector<double> &seconds)
override;
238 void maskTof(
const double tofMin,
const double tofMax)
override;
239 void maskCondition(
const std::vector<bool> &mask)
override;
241 void getTofs(std::vector<double> &tofs)
const override;
242 double getTofMin()
const override;
243 double getTofMax()
const override;
244 Mantid::Types::Core::DateAndTime getPulseTimeMax()
const override;
245 Mantid::Types::Core::DateAndTime getPulseTimeMin()
const override;
246 void getPulseTimeMinMax(Mantid::Types::Core::DateAndTime &tMin, Mantid::Types::Core::DateAndTime &tM)
const;
247 Mantid::Types::Core::DateAndTime getTimeAtSampleMax(
const double &tofFactor,
const double &tofOffset)
const override;
248 Mantid::Types::Core::DateAndTime getTimeAtSampleMin(
const double &tofFactor,
const double &tofOffset)
const override;
250 std::vector<double> getTofs()
const override;
253 std::vector<double> getWeights()
const override;
255 void getWeights(std::vector<double> &weights)
const override;
258 std::vector<double> getWeightErrors()
const override;
260 void getWeightErrors(std::vector<double> &weightErrors)
const override;
262 std::vector<Types::Core::DateAndTime> getPulseTimes()
const override;
265 std::vector<Types::Core::DateAndTime> getPulseTOFTimes()
const;
268 std::vector<Types::Core::DateAndTime> getPulseTOFTimesAtSample(
const double &factor,
const double &shift)
const;
270 void setTofs(
const MantidVec &tofs)
override;
274 void filterByPulseTime(Types::Core::DateAndTime start, Types::Core::DateAndTime stop,
EventList &output)
const;
281 void initializePartials(std::map<int, EventList *> partials)
const;
283 void multiply(
const double value,
const double error = 0.0)
override;
288 void divide(
const double value,
const double error = 0.0)
override;
294 void convertUnitsQuickly(
const double &factor,
const double &power);
297 HistogramData::Histogram getHistogram()
const;
300 HistogramData::Histogram histogram()
const override;
301 HistogramData::Counts counts()
const override;
302 HistogramData::CountVariances countVariances()
const override;
303 HistogramData::CountStandardDeviations countStandardDeviations()
const override;
304 HistogramData::Frequencies frequencies()
const override;
305 HistogramData::FrequencyVariances frequencyVariances()
const override;
306 HistogramData::FrequencyStandardDeviations frequencyStandardDeviations()
const override;
307 const HistogramData::HistogramY &
y()
const override;
308 const HistogramData::HistogramE &e()
const override;
312 void generateCountsHistogramPulseTime(
const double &xMin,
const double &xMax,
MantidVec &Y,
313 const double TofMin = std::numeric_limits<double>::lowest(),
314 const double TofMax = std::numeric_limits<double>::max())
const;
317 void checkAndSanitizeHistogram(HistogramData::Histogram &histogram)
override;
318 void checkWorksWithPoints()
const override;
319 void checkIsYAndEWritable()
const override;
322 using ISpectrum::copyDataInto;
323 void copyDataInto(
EventList &sink)
const override;
324 void copyDataInto(
Histogram1D &sink)
const override;
326 const HistogramData::Histogram &
histogramRef()
const override {
return m_histogram; }
327 HistogramData::Histogram &mutableHistogramRef()
override;
333 mutable std::unique_ptr<std::vector<Types::Event::TofEvent>>
events;
354 static typename std::vector<T>::const_iterator findFirstPulseEvent(
const std::vector<T> &events,
355 const double seek_pulsetime);
358 typename std::vector<T>::const_iterator findFirstTimeAtSampleEvent(
const std::vector<T> &events,
359 const double seek_time,
const double &tofFactor,
360 const double &tofOffset)
const;
363 void generateCountsHistogram(
const double step,
const MantidVec &X,
MantidVec &Y)
const;
366 static std::optional<size_t> findLinearBin(
const MantidVec &X,
const double tof,
const double divisor,
367 const double offset,
const bool findExact =
true);
368 static std::optional<size_t> findLogBin(
const MantidVec &X,
const double tof,
const double divisor,
369 const double offset,
const bool findExact =
true);
372 static size_t findExactBin(
const MantidVec &X,
const double tof,
const size_t n_bin);
376 void generateCountsHistogramTimeAtSample(
const MantidVec &X,
MantidVec &Y,
const double &tofFactor,
377 const double &tofOffset)
const;
381 void switchToWeightedEvents();
382 void switchToWeightedEventsNoTime();
384 void sortPulseTimeTOFDelta(
const Types::Core::DateAndTime &start,
const double seconds)
const;
387 template <
class T1,
class T2>
static void minusHelper(std::vector<T1> &events,
const std::vector<T2> &more_events);
389 static void compressEventsHelper(
const std::vector<T> &events, std::vector<WeightedEventNoTime> &out,
393 static void createWeightedEvents(std::vector<WeightedEventNoTime> &out,
const std::vector<double> &tof,
394 const std::vector<T> &weight,
const std::vector<T> &
error);
397 static void processWeightedEvents(
const std::vector<T> &events, std::vector<WeightedEventNoTime> &out,
398 const std::shared_ptr<std::vector<double>> histogram_bin_edges,
403 const double tolerance,
const Mantid::Types::Core::DateAndTime &timeStart,
404 const double seconds);
409 static void histogramForWeightsHelper(
const std::vector<T> &events,
const double step,
const MantidVec &X,
412 static void integrateHelper(std::vector<T> &events,
const double minX,
const double maxX,
const bool entireRange,
413 double &sum,
double &
error);
414 template <
class T>
void convertTofHelper(std::vector<T> &events,
const std::function<
double(
double)> &func);
416 template <
class T>
void convertTofHelper(std::vector<T> &events,
const double factor,
const double offset);
417 template <
class T>
void addPulsetimeHelper(std::vector<T> &events,
const double seconds);
418 template <
class T>
void addPulsetimesHelper(std::vector<T> &events,
const std::vector<double> &seconds);
419 template <
class T>
static std::size_t maskTofHelper(std::vector<T> &events,
const double tofMin,
const double tofMax);
420 template <
class T>
static std::size_t maskConditionHelper(std::vector<T> &events,
const std::vector<bool> &mask);
422 template <
class T>
static void getTofsHelper(
const std::vector<T> &events, std::vector<double> &tofs);
423 template <
class T>
static void getWeightsHelper(
const std::vector<T> &events, std::vector<double> &weights);
424 template <
class T>
static void getWeightErrorsHelper(
const std::vector<T> &events, std::vector<double> &weightErrors);
427 template <
typename UnaryOperation>
430 template <
class T>
static void setTofsHelper(std::vector<T> &events,
const std::vector<double> &tofs);
433 Types::Core::DateAndTime stop, std::vector<T> &output);
436 static void filterByTimeROIHelper(std::vector<T> &events,
const std::vector<Kernel::TimeInterval> &intervals,
439 template <
class T>
void filterInPlaceHelper(
Kernel::TimeROI const *timeRoi,
typename std::vector<T> &events);
441 template <
class T>
static void multiplyHelper(std::vector<T> &events,
const double value,
const double error = 0.0);
443 static void multiplyHistogramHelper(std::vector<T> &events,
const MantidVec &X,
const MantidVec &Y,
448 void convertUnitsViaTofHelper(
typename std::vector<T> &events,
Mantid::Kernel::Unit const *fromUnit,
451 void convertUnitsQuicklyHelper(
typename std::vector<T> &events,
const double &factor,
const double &power);