10#include "MantidCrystal/DllConfig.h"
11#include "MantidHistogramData/HistogramE.h"
12#include "MantidHistogramData/HistogramX.h"
13#include "MantidHistogramData/HistogramY.h"
29namespace FindSXPeaksHelper {
40 SXPeak(
double t,
double phi,
double intensity,
const std::vector<int> &spectral,
const size_t wsIndex,
49 bool compare(
const SXPeak &
rhs,
const double xTolerance,
const double phiTolerance,
const double thetaTolerance,
50 const XAxisUnit tofUnits = XAxisUnit::TOF)
const;
62 os <<
rhs.m_tof <<
"," <<
rhs.m_twoTheta <<
"," <<
rhs.m_phi <<
"," <<
rhs.m_intensity <<
"\n";
64 std::copy(
rhs.m_spectra.begin(),
rhs.m_spectra.end(), std::ostream_iterator<int>(os,
","));
68 const double &getIntensity()
const;
72 const std::vector<int> &getPeakSpectras()
const;
101using yIt = Mantid::HistogramData::HistogramY::const_iterator;
102using Bound = HistogramData::HistogramX::const_iterator;
104using PeakList = std::optional<std::vector<SXPeak>>;
117 const HistogramData::HistogramY &
m_y;
130 virtual bool isBelowBackground(
const double intensity,
const HistogramData::HistogramY &y)
const = 0;
135 bool isBelowBackground(
const double intensity,
const HistogramData::HistogramY &)
const override;
138 double m_background = 0.;
143 bool isBelowBackground(
const double intensity,
const HistogramData::HistogramY &
y)
const override;
146 double m_backgroundMultiplier = 1.;
159 PeakList findSXPeaks(
const HistogramData::HistogramX &x,
const HistogramData::HistogramY &y,
160 const HistogramData::HistogramE &e,
const int workspaceIndex)
const;
161 void setMinNBinsPerPeak(
int minBinsPerPeak);
164 void filterPeaksForMinBins(std::vector<std::unique_ptr<PeakContainer>> &inputPeakList)
const;
166 BoundsIterator getBounds(
const HistogramData::HistogramX &x)
const;
167 double calculatePhi(
size_t workspaceIndex)
const;
168 double getXValue(
const HistogramData::HistogramX &x,
const size_t peakLocation)
const;
169 double convertToTOF(
const double xValue,
const size_t workspaceIndex)
const;
171 const HistogramData::HistogramE &e,
Bound low,
Bound high,
172 const int workspaceIndex)
const = 0;
173 PeakList convertToSXPeaks(
const HistogramData::HistogramX &x,
const HistogramData::HistogramY &y,
174 const std::vector<std::unique_ptr<PeakContainer>> &peaks,
const int workspaceIndex)
const;
189 PeakList dofindSXPeaks(
const HistogramData::HistogramX &
x,
const HistogramData::HistogramY &
y,
190 [[maybe_unused]]
const HistogramData::HistogramE &e,
Bound low,
Bound high,
191 const int workspaceIndex)
const override;
199 PeakList dofindSXPeaks(
const HistogramData::HistogramX &
x,
const HistogramData::HistogramY &
y,
200 [[maybe_unused]]
const HistogramData::HistogramE &e,
Bound low,
Bound high,
201 const int workspaceIndex)
const override;
204 std::vector<std::unique_ptr<PeakContainer>>
205 getAllPeaks(
const HistogramData::HistogramX &
x,
const HistogramData::HistogramY &
y,
Bound low,
Bound high,
209#define NSIGMA_COMPARISON_THRESHOLD 1e-10
216 PeakList dofindSXPeaks(
const HistogramData::HistogramX &
x,
const HistogramData::HistogramY &
y,
217 const HistogramData::HistogramE &e,
Bound low,
Bound high,
218 const int workspaceIndex)
const override;
221 std::vector<std::unique_ptr<PeakContainer>> getAllNSigmaPeaks(
const HistogramData::HistogramX &
x,
222 const HistogramData::HistogramY &
y,
223 const HistogramData::HistogramE &e,
Bound low,
249 AbsoluteCompareStrategy(
const double tofResolution,
const double phiResolution,
const double twoThetaResolution,
268 virtual std::vector<SXPeak>
reduce(
const std::vector<SXPeak> &peaks,
271 void setMinNSpectraPerPeak(
int minSpectrasForPeak);
272 void setMaxNSpectraPerPeak(
int maxSpectrasForPeak);
286 void reducePeaksFromNumberOfSpectras(std::vector<SXPeak> &inputPeaks)
const;
295 std::vector<std::vector<SXPeak *>> getPeakGroups(
const std::vector<SXPeak> &peakList,
297 std::vector<SXPeak> getFinalPeaks(
const std::vector<std::vector<SXPeak *>> &peakGroups)
const;
const std::vector< double > & rhs
API::SpectrumInfo is an intermediate step towards a SpectrumInfo that is part of Instrument-2....
double m_twoThetaResolution
const double m_xUnitResolution
virtual bool compare(const SXPeak &lhs, const SXPeak &rhs) const =0
virtual ~CompareStrategy()=default
void startRecord(yIt item)
yIt getMaxIterator() const
const HistogramData::HistogramY & m_y
void stopRecord(yIt item)
double getStartingSignal() const
size_t getNumberOfPointsInPeak() const
virtual PeakList dofindSXPeaks(const HistogramData::HistogramX &x, const HistogramData::HistogramY &y, const HistogramData::HistogramE &e, Bound low, Bound high, const int workspaceIndex) const =0
const BackgroundStrategy * m_backgroundStrategy
virtual ~PeakFindingStrategy()=default
const API::SpectrumInfo & m_spectrumInfo
const CompareStrategy * m_compareStrategy
virtual ~ReducePeakListStrategy()=default
virtual std::vector< SXPeak > reduce(const std::vector< SXPeak > &peaks, Mantid::Kernel::ProgressBase &progress) const =0
const double m_resolution
MatrixWorkspace_sptr MANTID_API_DLL operator+=(const MatrixWorkspace_sptr &lhs, const MatrixWorkspace_sptr &rhs)
Adds two workspaces.
Mantid::HistogramData::HistogramY::const_iterator yIt
HistogramData::HistogramX::const_iterator Bound
XAxisUnit
enum to determine the units of the workspaces X axis we are searching in
std::optional< std::vector< SXPeak > > PeakList
std::pair< Bound, Bound > BoundsIterator
bool compare(const mypair &left, const mypair &right)
Helper class which provides the Collimation Length for SANS instruments.
constexpr int EMPTY_INT() noexcept
Returns what we consider an "empty" integer within a property.
int32_t detid_t
Typedef for a detector ID.
constexpr double EMPTY_DBL() noexcept
Returns what we consider an "empty" double within a property.
virtual bool isBelowBackground(const double intensity, const HistogramData::HistogramY &y) const =0
virtual ~BackgroundStrategy()=default
friend std::ostream & operator<<(std::ostream &os, const SXPeak &rhs)
int m_nPixels
Number of contributing pixels.
double m_phi
Phi angle for the centre detector of the peak.
double m_tof
TOF for the peak centre.
std::vector< int > m_spectra
Contributing spectra to this peak.
Kernel::V3D m_unitWaveVector
Unit vector in the direction of the wavevector.
detid_t m_detId
Detector ID.
double m_LTotal
Detector-sample distance.
double m_intensity
Measured intensity of centre of the peak.
double m_dSpacing
d-spacing at the peak centre
std::string m_qConvention
Q Convention.
double m_twoTheta
2 * theta angle for then centre detector of the peak
size_t m_wsIndex
Detector workspace index.