10#include "MantidCrystal/DllConfig.h"
11#include "MantidHistogramData/HistogramE.h"
12#include "MantidHistogramData/HistogramX.h"
13#include "MantidHistogramData/HistogramY.h"
28namespace FindSXPeaksHelper {
39 SXPeak(
double t,
double phi,
double intensity,
const std::vector<int> &spectral,
const size_t wsIndex,
48 bool compare(
const SXPeak &
rhs,
const double xTolerance,
const double phiTolerance,
const double thetaTolerance,
49 const XAxisUnit tofUnits = XAxisUnit::TOF)
const;
61 os <<
rhs.m_tof <<
"," <<
rhs.m_twoTheta <<
"," <<
rhs.m_phi <<
"," <<
rhs.m_intensity <<
"\n";
63 std::copy(
rhs.m_spectra.begin(),
rhs.m_spectra.end(), std::ostream_iterator<int>(os,
","));
67 const double &getIntensity()
const;
71 const std::vector<int> &getPeakSpectras()
const;
100using yIt = Mantid::HistogramData::HistogramY::const_iterator;
101using Bound = HistogramData::HistogramX::const_iterator;
103using PeakList = std::optional<std::vector<SXPeak>>;
116 const HistogramData::HistogramY &
m_y;
134 bool isBelowBackground(
const double intensity,
const HistogramData::HistogramY &)
const override;
137 double m_background = 0.;
142 bool isBelowBackground(
const double intensity,
const HistogramData::HistogramY &
y)
const override;
145 double m_backgroundMultiplier = 1.;
158 PeakList findSXPeaks(
const HistogramData::HistogramX &x,
const HistogramData::HistogramY &y,
159 const HistogramData::HistogramE &e,
const int workspaceIndex)
const;
160 void setMinNBinsPerPeak(
int minBinsPerPeak);
163 void filterPeaksForMinBins(std::vector<std::unique_ptr<PeakContainer>> &inputPeakList)
const;
165 BoundsIterator getBounds(
const HistogramData::HistogramX &x)
const;
166 double calculatePhi(
size_t workspaceIndex)
const;
167 double getXValue(
const HistogramData::HistogramX &x,
const size_t peakLocation)
const;
168 double convertToTOF(
const double xValue,
const size_t workspaceIndex)
const;
170 const HistogramData::HistogramE &e,
Bound low,
Bound high,
171 const int workspaceIndex)
const = 0;
172 PeakList convertToSXPeaks(
const HistogramData::HistogramX &x,
const HistogramData::HistogramY &y,
173 const std::vector<std::unique_ptr<PeakContainer>> &peaks,
const int workspaceIndex)
const;
188 PeakList dofindSXPeaks(
const HistogramData::HistogramX &
x,
const HistogramData::HistogramY &
y,
189 [[maybe_unused]]
const HistogramData::HistogramE &e,
Bound low,
Bound high,
190 const int workspaceIndex)
const override;
198 PeakList dofindSXPeaks(
const HistogramData::HistogramX &
x,
const HistogramData::HistogramY &
y,
199 [[maybe_unused]]
const HistogramData::HistogramE &e,
Bound low,
Bound high,
200 const int workspaceIndex)
const override;
203 std::vector<std::unique_ptr<PeakContainer>>
204 getAllPeaks(
const HistogramData::HistogramX &
x,
const HistogramData::HistogramY &
y,
Bound low,
Bound high,
208#define NSIGMA_COMPARISON_THRESHOLD 1e-10
215 PeakList dofindSXPeaks(
const HistogramData::HistogramX &
x,
const HistogramData::HistogramY &
y,
216 const HistogramData::HistogramE &e,
Bound low,
Bound high,
217 const int workspaceIndex)
const override;
220 std::vector<std::unique_ptr<PeakContainer>> getAllNSigmaPeaks(
const HistogramData::HistogramX &
x,
221 const HistogramData::HistogramY &
y,
222 const HistogramData::HistogramE &e,
Bound low,
248 AbsoluteCompareStrategy(
const double tofResolution,
const double phiResolution,
const double twoThetaResolution,
267 virtual std::vector<SXPeak>
reduce(
const std::vector<SXPeak> &peaks,
270 void setMinNSpectraPerPeak(
int minSpectrasForPeak);
271 void setMaxNSpectraPerPeak(
int maxSpectrasForPeak);
285 void reducePeaksFromNumberOfSpectras(std::vector<SXPeak> &inputPeaks)
const;
294 std::vector<std::vector<SXPeak *>> getPeakGroups(
const std::vector<SXPeak> &peakList,
296 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.