16#include "MantidNexus/NexusFile.h"
36 setNumberOfDetectorGroups(0);
46 :
IPeaksWorkspace(other), m_peaks(other.m_peaks), m_columns(), m_columnNames(), m_coordSystem(other.m_coordSystem) {
57 std::vector<ColumnAndDirection> &
criteria;
68 const auto &col =
name.first;
69 const bool ascending =
name.second;
70 bool lessThan =
false;
71 if (col ==
"BankName") {
78 lessThan = (valA < valB);
86 lessThan = (valA < valB);
127 if (peakNum >=
static_cast<int>(
m_peaks.size()) || peakNum < 0) {
128 throw std::invalid_argument(
"PeaksWorkspace::removePeak(): peakNum is out of range.");
137 if (badPeaks.empty())
141 auto it = std::remove_if(
m_peaks.begin(),
m_peaks.end(), [&ip, badPeaks](
const Peak &pk) {
144 return std::any_of(badPeaks.cbegin(), badPeaks.cend(), [ip](int badPeak) { return badPeak == ip; });
146 m_peaks.erase(it, m_peaks.end());
154 if (
dynamic_cast<const Peak *
>(&ipeak)) {
155 m_peaks.emplace_back(
static_cast<const Peak &
>(ipeak));
183 if (peakNum >=
m_peaks.size()) {
184 throw std::invalid_argument(
"PeaksWorkspace::getPeak(): peakNum is out of range.");
195 if (peakNum >=
m_peaks.size()) {
196 throw std::invalid_argument(
"PeaksWorkspace::getPeak(): peakNum is out of range.");
209 std::optional<double> detectorDistance)
const {
211 std::unique_ptr<IPeak> peak = std::make_unique<Peak>(this->
getInstrument(), QLabFrame, detectorDistance);
213 peak->setGoniometerMatrix(this->
run().getGoniometer().getR());
253 double wavelength(0);
254 if (props->hasProperty(
"wavelength")) {
255 wavelength = props->getPropertyValueAsType<
double>(
"wavelength");
256 }
else if (props->hasProperty(
"energy")) {
260 wavelength =
getInstrument()->getNumberParameter(
"wavelength").at(0);
263 if (wavelength > 0) {
266 <<
" degrees for Q sample = " <<
position <<
"\n";
293 bool labCoords)
const {
294 std::vector<std::pair<std::string, std::string>>
Result;
295 std::ostringstream oss;
296 oss << std::setw(12) << std::fixed << std::setprecision(3) << (qFrame.
norm());
297 std::pair<std::string, std::string> QMag(
"|Q|", oss.str());
298 Result.emplace_back(QMag);
302 oss << std::setw(12) << std::fixed << std::setprecision(3) << (2.0 * M_PI / qFrame.
norm());
304 std::pair<std::string, std::string> dspc(
"d-spacing", oss.str());
307 Result.emplace_back(dspc);
310 bool hasOneRunNumber =
true;
314 double minDist = 10000000;
315 for (
int i = 0; i < NPeaks; i++) {
329 else if (runNum !=
run)
330 hasOneRunNumber =
false;
345 Qsamp = InvGon * Qlab;
352 if (labCoords || seqNum >= 0)
355 std::pair<std::string, std::string> QlabStr(
"Qlab", boost::lexical_cast<std::string>(Qlab));
356 Result.emplace_back(QlabStr);
359 if (!labCoords || seqNum >= 0) {
361 std::pair<std::string, std::string> QsampStr(
"QSample", boost::lexical_cast<std::string>(Qsamp));
362 Result.emplace_back(QsampStr);
369 if (
sample().hasOrientedLattice()) {
371 peak->setGoniometerMatrix(Gon);
377 V3D hkl = UB * Qsamp / 2 / M_PI;
379 std::pair<std::string, std::string>
HKL(
"HKL", boost::lexical_cast<std::string>(hkl));
383 if (hasOneRunNumber) {
384 std::pair<std::string, std::string> runn(
"RunNumber",
" " +
std::to_string(runNum));
385 Result.emplace_back(runn);
391 Kernel::V3D PhiChiOmega(OmegaChiPhi[2], OmegaChiPhi[1], OmegaChiPhi[0]);
393 std::pair<std::string, std::string> GRead(
"Goniometer Angles", boost::lexical_cast<std::string>(PhiChiOmega));
394 Result.emplace_back(GRead);
396 std::pair<std::string, std::string> SeqNum(
"Seq Num,1st=1",
" " +
std::to_string(seqNum + 1));
397 Result.emplace_back(SeqNum);
399 oss << std::setw(12) << std::fixed << std::setprecision(3) << (peak->getWavelength());
400 std::pair<std::string, std::string> wl(
"Wavelength", oss.str());
405 if (peak->findDetector()) {
406 std::pair<std::string, std::string> detpos(
"Position(x,y,z)",
407 boost::lexical_cast<std::string>(peak->getDetPos()));
408 Result.emplace_back(detpos);
410 oss << std::setw(15) << std::fixed << std::setprecision(3) << (peak->getTOF());
411 std::pair<std::string, std::string> tof(
"TOF", oss.str());
416 oss << std::setw(12) << std::fixed << std::setprecision(3) << (peak->getFinalEnergy());
417 std::pair<std::string, std::string> Energy(
"Energy", oss.str());
418 Result.emplace_back(Energy);
422 std::pair<std::string, std::string> row(
"Row",
" " +
std::to_string(peak->getRow()));
425 std::pair<std::string, std::string> col(
"Col",
" " +
std::to_string(peak->getCol()));
428 std::pair<std::string, std::string> bank(
"Bank",
" " + peak->getBankName());
429 Result.emplace_back(bank);
431 oss << std::setw(12) << std::fixed << std::setprecision(3) << (peak->getScattering());
432 std::pair<std::string, std::string> scat(
"Scattering Angle", oss.str());
433 Result.emplace_back(scat);
458 const V3D qLabFrame = goniometer.getR() * lattice.getUB() *
HKL * 2 * M_PI;
462 std::unique_ptr<IPeak> peak = std::make_unique<Peak>(this->
getInstrument(), qLabFrame);
465 peak->setIntHKL(peak->getHKL());
467 peak->setGoniometerMatrix(goniometer.getR());
497 std::vector<std::pair<std::string, std::string>>
Result;
498 std::ostringstream oss;
499 oss << std::setw(12) << std::fixed << std::setprecision(3) << (qFrame.
norm());
500 std::pair<std::string, std::string> QMag(
"|Q|", oss.str());
501 Result.emplace_back(QMag);
505 oss << std::setw(12) << std::fixed << std::setprecision(3) << (2.0 * M_PI / qFrame.
norm());
507 std::pair<std::string, std::string> dspc(
"d-spacing", oss.str());
510 Result.emplace_back(dspc);
513 double minDist = 10000000;
541 const std::string peaksIntegrated =
"PeaksIntegrated";
542 if (this->
run().hasProperty(peaksIntegrated)) {
543 const auto value = boost::lexical_cast<int>(this->
run().getProperty(peaksIntegrated)->
value());
563 table->addColumn(
"int",
"Index");
564 table->addColumn(
"int",
"DetectorID");
566 const auto npeaks(
static_cast<int>(this->
rowCount()));
568 for (
int i = 0; i < npeaks; ++i) {
571 auto itEnd = detIDs.end();
572 for (
auto it = detIDs.begin(); it != itEnd; ++it) {
574 table->cell<
int>(
nrows, 0) = i;
575 table->cell<
int>(
nrows, 1) = *it;
626 for (
size_t i = 0; i <
m_columns.size(); i++)
629 throw std::invalid_argument(
"Column named " +
name +
" was not found in the PeaksWorkspace.");
636 throw std::invalid_argument(
"PeaksWorkspace::getColumn() called with invalid index.");
644 throw std::invalid_argument(
"PeaksWorkspace::getColumn() called with invalid index.");
651 const size_t np(
m_peaks.size());
654 std::vector<int> detectorID(np);
655 std::vector<double> H(np);
656 std::vector<double> K(np);
657 std::vector<double> L(np);
658 std::vector<double> intensity(np);
659 std::vector<double> sigmaIntensity(np);
660 std::vector<double> binCount(np);
661 std::vector<double> initialEnergy(np);
662 std::vector<double> finalEnergy(np);
663 std::vector<double> waveLength(np);
664 std::vector<double> scattering(np);
665 std::vector<double> dSpacing(np);
666 std::vector<double>
TOF(np);
667 std::vector<int> runNumber(np);
668 std::vector<int> peakNumber(np);
669 std::vector<double> tbar(np);
670 std::vector<double> intHKL(3 * np);
671 std::vector<double> intMNP(3 * np);
672 std::vector<double> goniometerMatrix(9 * np);
673 std::vector<std::string> shapes(np);
676 size_t maxShapeJSONLength = 0;
677 for (
size_t i = 0; i < np; i++) {
697 intHKL[3 * i + 0] = hkl[0];
698 intHKL[3 * i + 1] = hkl[1];
699 intHKL[3 * i + 2] = hkl[2];
701 intMNP[3 * i + 0] = mnp[0];
702 intMNP[3 * i + 1] = mnp[1];
703 intMNP[3 * i + 2] = mnp[2];
705 goniometerMatrix[9 * i + 0] = gm[0][0];
706 goniometerMatrix[9 * i + 1] = gm[1][0];
707 goniometerMatrix[9 * i + 2] = gm[2][0];
708 goniometerMatrix[9 * i + 3] = gm[0][1];
709 goniometerMatrix[9 * i + 4] = gm[1][1];
710 goniometerMatrix[9 * i + 5] = gm[2][1];
711 goniometerMatrix[9 * i + 6] = gm[0][2];
712 goniometerMatrix[9 * i + 7] = gm[1][2];
713 goniometerMatrix[9 * i + 8] = gm[2][2];
716 shapes[i] = shapeJSON;
717 if (shapeJSON.size() > maxShapeJSONLength) {
718 maxShapeJSONLength = shapeJSON.size();
723 const std::string specifyInteger =
"An integer";
724 const std::string specifyDouble =
"A double";
725 const std::string specifyString =
"A string";
726 file->makeGroup(
"peaks_workspace",
"NXentry",
730 file->writeData(
"coordinate_system",
static_cast<uint32_t
>(
m_coordSystem));
735 file->putAttr(
"QConvention", m_QConvention);
738 file->writeData(
"column_1", detectorID);
739 file->openData(
"column_1");
740 file->putAttr(
"name",
"Detector ID");
741 file->putAttr(
"interpret_as", specifyInteger);
742 file->putAttr(
"units",
"Not known");
746 file->writeData(
"column_2", H);
747 file->openData(
"column_2");
748 file->putAttr(
"name",
"H");
749 file->putAttr(
"interpret_as", specifyDouble);
750 file->putAttr(
"units",
"Not known");
754 file->writeData(
"column_3", K);
755 file->openData(
"column_3");
756 file->putAttr(
"name",
"K");
757 file->putAttr(
"interpret_as", specifyDouble);
758 file->putAttr(
"units",
"Not known");
762 file->writeData(
"column_4", L);
763 file->openData(
"column_4");
764 file->putAttr(
"name",
"L");
765 file->putAttr(
"interpret_as", specifyDouble);
766 file->putAttr(
"units",
"Not known");
770 file->writeData(
"column_5", intensity);
771 file->openData(
"column_5");
772 file->putAttr(
"name",
"Intensity");
773 file->putAttr(
"interpret_as", specifyDouble);
774 file->putAttr(
"units",
"Not known");
778 file->writeData(
"column_6", sigmaIntensity);
779 file->openData(
"column_6");
780 file->putAttr(
"name",
"Sigma Intensity");
781 file->putAttr(
"interpret_as", specifyDouble);
782 file->putAttr(
"units",
"Not known");
786 file->writeData(
"column_7", binCount);
787 file->openData(
"column_7");
788 file->putAttr(
"name",
"Bin Count");
789 file->putAttr(
"interpret_as", specifyDouble);
790 file->putAttr(
"units",
"Not known");
794 file->writeData(
"column_8", initialEnergy);
795 file->openData(
"column_8");
796 file->putAttr(
"name",
"Initial Energy");
797 file->putAttr(
"interpret_as", specifyDouble);
798 file->putAttr(
"units",
"Not known");
802 file->writeData(
"column_9", finalEnergy);
803 file->openData(
"column_9");
804 file->putAttr(
"name",
"Final Energy");
805 file->putAttr(
"interpret_as", specifyDouble);
806 file->putAttr(
"units",
"Not known");
810 file->writeData(
"column_10", waveLength);
811 file->openData(
"column_10");
812 file->putAttr(
"name",
"Wave Length");
813 file->putAttr(
"interpret_as", specifyDouble);
814 file->putAttr(
"units",
"Not known");
818 file->writeData(
"column_11", scattering);
819 file->openData(
"column_11");
820 file->putAttr(
"name",
"Scattering");
821 file->putAttr(
"interpret_as", specifyDouble);
822 file->putAttr(
"units",
"Not known");
826 file->writeData(
"column_12", dSpacing);
827 file->openData(
"column_12");
828 file->putAttr(
"name",
"D Spacing");
829 file->putAttr(
"interpret_as", specifyDouble);
830 file->putAttr(
"units",
"Not known");
834 file->writeData(
"column_13",
TOF);
835 file->openData(
"column_13");
836 file->putAttr(
"name",
"TOF");
837 file->putAttr(
"interpret_as", specifyDouble);
838 file->putAttr(
"units",
"Not known");
842 file->writeData(
"column_14", runNumber);
843 file->openData(
"column_14");
844 file->putAttr(
"name",
"Run Number");
845 file->putAttr(
"interpret_as", specifyInteger);
846 file->putAttr(
"units",
"Not known");
850 file->writeData(
"column_17", peakNumber);
851 file->openData(
"column_17");
852 file->putAttr(
"name",
"Peak Number");
853 file->putAttr(
"interpret_as", specifyInteger);
854 file->putAttr(
"units",
"Not known");
858 file->writeData(
"column_18", tbar);
859 file->openData(
"column_18");
860 file->putAttr(
"name",
"TBar");
861 file->putAttr(
"interpret_as", specifyDouble);
862 file->putAttr(
"units",
"Not known");
868 file->writeData(
"column_19", intHKL, qlab_dims);
869 file->openData(
"column_19");
870 file->putAttr(
"name",
"IntHKL");
871 file->putAttr(
"interpret_as",
"A vector of 3 doubles");
872 file->putAttr(
"units",
"r.l.u.");
876 file->writeData(
"column_20", intMNP, qlab_dims);
877 file->openData(
"column_20");
878 file->putAttr(
"name",
"IntMNP");
879 file->putAttr(
"interpret_as",
"A vector of 3 doubles");
880 file->putAttr(
"units",
"r.l.u.");
885 file->writeData(
"column_15", goniometerMatrix, array_dims);
886 file->openData(
"column_15");
887 file->putAttr(
"name",
"Goniometer Matrix");
888 file->putAttr(
"interpret_as",
"A matrix of 3x3 doubles");
889 file->putAttr(
"units",
"Not known");
894 dims.emplace_back(np);
895 dims.emplace_back(
static_cast<int>(maxShapeJSONLength));
896 const std::string
name =
"column_16";
898 file->openData(
name);
900 auto toNexus =
new char[maxShapeJSONLength * np];
901 for (
size_t ii = 0; ii < np; ii++) {
902 std::string rowStr = shapes[ii];
903 for (
size_t ic = 0; ic < rowStr.size(); ic++)
904 toNexus[ii * maxShapeJSONLength + ic] = rowStr[ic];
905 for (
size_t ic = rowStr.size(); ic < static_cast<size_t>(maxShapeJSONLength); ic++)
906 toNexus[ii * maxShapeJSONLength + ic] =
' ';
909 file->putData(toNexus);
912 file->putAttr(
"units",
"Not known");
913 file->putAttr(
"name",
"Shape");
914 file->putAttr(
"interpret_as", specifyString);
960IPropertyManager::getValue<Mantid::DataObjects::PeaksWorkspace_sptr>(
const std::string &
name)
const {
961 if (
const auto *prop =
965 std::string message =
966 "Attempt to assign property " +
name +
" to incorrect type. Expected shared_ptr<PeaksWorkspace>.";
967 throw std::runtime_error(message);
973IPropertyManager::getValue<Mantid::DataObjects::PeaksWorkspace_const_sptr>(
const std::string &
name)
const {
974 if (
const auto *prop =
976 return prop->operator()();
978 std::string message =
979 "Attempt to assign property " +
name +
" to incorrect type. Expected const shared_ptr<PeaksWorkspace>.";
980 throw std::runtime_error(message);
double value
The value of the point.
std::map< DeltaEMode::Type, std::string > index
#define DLLExport
Definitions of the DLLImport compiler directives for MSVC.
#define DECLARE_WORKSPACE(classname)
Run & mutableRun()
Writable version of the run object.
const Run & run() const
Run details object access.
Geometry::Instrument_const_sptr getInstrument() const
Returns the parameterized instrument.
const Sample & sample() const
Sample accessors.
int getRunNumber() const
Utility method to get the run number.
void setNumberOfDetectorGroups(const size_t count) const
Sets the number of detector groups.
Interface to the class Mantid::DataObjects::PeaksWorkspace.
ITableWorkspace is an implementation of Workspace in which the data are organised in columns of same ...
This class contains the information about the log entries.
const Geometry::Goniometer & getGoniometer() const
Return reference to the first const Goniometer object for this run.
const Geometry::OrientedLattice & getOrientedLattice() const
Get a reference to the sample's OrientedLattice.
Mantid::Kernel::V3D getIntMNP() const override
Return the int MNP vector.
double getL() const override
Get the L index of the peak.
double getIntensity() const override
Return the integrated peak intensity.
double getAbsorptionWeightedPathLength() const override
Gets the absorption weighted path length.
double getSigmaIntensity() const override
Return the error on the integrated peak intensity.
double getK() const override
Get the K index of the peak.
int getPeakNumber() const override
Returns the unique peak number Returns -1 if it could not find it.
int getRunNumber() const override
Return the run number this peak was measured at.
double getH() const override
Get the H index of the peak.
double getBinCount() const override
Return the # of counts in the bin at its peak.
Mantid::Kernel::Matrix< double > getGoniometerMatrix() const override
Get the goniometer rotation matrix at which this peak was measured.
const Mantid::Geometry::PeakShape & getPeakShape() const override
Get the peak shape.
Mantid::Kernel::V3D getIntHKL() const override
Return the int HKL vector.
PeakColumn : a Column sub-class used to display peak information as a TableWorkspace.
Comparator class for sorting peaks by one or more criteria.
bool operator()(const Peak &a, const Peak &b)
Compare two peaks using the stored criteria.
PeakComparator(std::vector< ColumnAndDirection > &criteria)
Constructor for the comparator for sorting peaks.
LeanElasticPeaksWorkspace::ColumnAndDirection ColumnAndDirection
std::vector< ColumnAndDirection > & criteria
Structure describing a single-crystal peak.
double getDSpacing() const override
Calculate the d-spacing of the peak, in 1/Angstroms
const std::set< int > & getContributingDetIDs() const
Return the set of detector IDs that contribute to this peak.
double getInitialEnergy() const override
Get the initial (incident) neutron energy in meV.
Mantid::Kernel::V3D getQLabFrame() const override
Return the Q change (of the lattice, k_i - k_f) for this peak.
int getDetectorID() const override
Get the ID of the detector at the center of the peak
double getFinalEnergy() const override
Get the final neutron energy in meV.
double getWavelength() const override
Calculate the neutron wavelength (in angstroms) at the peak (Note for inelastic scattering - it is th...
double getTOF() const override
Calculate the time of flight (in microseconds) of the neutrons for this peak, using the geometry of t...
Mantid::Kernel::V3D getQSampleFrame() const override
Return the Q change (of the lattice, k_i - k_f) for this peak.
const std::string & getBankName() const
Find the name of the bank that is the parent of the detector.
double getScattering() const override
Calculate the scattering angle of the peak
double getValueByColName(std::string colName) const override
Helper function for displaying/sorting peaks.
The class PeaksWorkspace stores information about a set of SCD peaks.
int getNumberPeaks() const override
Kernel::SpecialCoordinateSystem getSpecialCoordinateSystem() const override
Get the special coordinate system.
API::ITableWorkspace_sptr createDetectorTable() const override
Creates a new TableWorkspace giving the IDs of the detectors that contribute to the peaks within the ...
std::vector< std::shared_ptr< Mantid::DataObjects::PeakColumn< Peak > > > m_columns
Column shared pointers.
IPeak_uptr createPeak() const override
Create a Peak using default values.
std::pair< std::string, bool > ColumnAndDirection
void saveNexus(Nexus::File *file) const override
std::vector< Peak > m_peaks
Vector of Peak contained within.
ITableWorkspace * doCloneColumns(const std::vector< std::string > &colNames) const override
void removePeaks(std::vector< int > badPeaks) override
Removes multiple peaks.
void removePeak(int peakNum) override
Removes the indicated peak.
std::vector< std::string > m_columnNames
Column names.
std::vector< Peak > & getPeaks()
Return a reference to the Peaks vector.
void initColumns()
Initialize the table structure.
std::shared_ptr< Mantid::API::Column > getColumn(const std::string &name) override
Gets the shared pointer to a column by name.
virtual size_t getColumnIndex(const std::string &name) const
IPeak_uptr createPeakHKL(const Kernel::V3D &HKL) const override
Create a Peak from a HKL value provided by the client.
PeaksWorkspace()
Constructor.
void addPeakColumn(const std::string &name)
Adds a new PeakColumn of the given type.
IPeak_uptr createPeakQSample(const Kernel::V3D &position) const override
Creates an instance of a Peak BUT DOES NOT ADD IT TO THE WORKSPACE.
std::vector< std::pair< std::string, std::string > > peakInfo(const Kernel::V3D &qFrame, bool labCoords) const override
Returns selected information for a "peak" at QLabFrame.
std::string getConvention() const override
bool hasIntegratedPeaks() const override
Getter for the integration status.
void sort(std::vector< ColumnAndDirection > &criteria) override
Sort the peaks by one or more criteria.
API::LogManager_sptr logs() override
Get access to shared pointer containing workspace porperties.
int peakInfoNumber(const Kernel::V3D &qFrame, bool labCoords) const override
Returns selected information for a "peak" at QLabFrame.
API::LogManager_const_sptr getLogs() const override
Get constant access to shared pointer containing workspace porperties; Copies logs into new LogManage...
size_t getMemorySize() const override
Return the memory used in bytes.
Kernel::SpecialCoordinateSystem m_coordSystem
Coordinates.
void addPeak(const Geometry::IPeak &peak) override
Add a peak to the list.
void setCoordinateSystem(const Kernel::SpecialCoordinateSystem coordinateSystem) override
Set the special coordinate system.
Peak & getPeak(size_t const peakNum) override
Return a reference to the Peak.
size_t rowCount() const override
Number of rows in the workspace.
Class to represent a particular goniometer setting, which is described by the rotation matrix.
std::vector< double > getEulerAngles(const std::string &convention="YZX")
Return Euler angles acording to a convention.
const Kernel::DblMatrix & getR() const
Return global rotation matrix.
void calcFromQSampleAndWavelength(const Mantid::Kernel::V3D &Q, double wavelength, bool flip_x=false, bool inner=false)
Calculate goniometer for rotation around y-asix for constant wavelength from Q Sample.
Structure describing a single-crystal peak.
Class to implement UB matrix.
const Kernel::DblMatrix & getUB() const
Get the UB matrix.
virtual std::string toJSON() const =0
Serialize.
Marks code as not implemented yet.
The Logger class is in charge of the publishing messages from the framework through various channels.
void information(const std::string &msg)
Logs at information level.
T Invert()
LU inversion routine.
The concrete, templated class for properties.
static T & Instance()
Return a reference to the Singleton instance, creating it if it does not already exist Creation is do...
static double run(const std::string &src, const std::string &dest, const double srcValue, const double l1, const double l2, const double theta, const DeltaEMode::Type emode, const double efixed)
Convert a single value between the given units (as strings)
double distance(const V3D &v) const noexcept
Calculates the distance between two vectors.
double norm() const noexcept
static unsigned short constexpr CHAR
std::shared_ptr< const LogManager > LogManager_const_sptr
shared pointer to the logManager base class (const version)
std::shared_ptr< LogManager > LogManager_sptr
shared pointer to the logManager base class
std::shared_ptr< ITableWorkspace > ITableWorkspace_sptr
shared pointer to Mantid::API::ITableWorkspace
Kernel::Logger g_log("ExperimentInfo")
static logger object
std::shared_ptr< const PeaksWorkspace > PeaksWorkspace_const_sptr
Typedef for a shared pointer to a const peaks workspace.
std::shared_ptr< PeaksWorkspace > PeaksWorkspace_sptr
Typedef for a shared pointer to a peaks workspace.
std::unique_ptr< Peak > Peak_uptr
std::unique_ptr< IPeak > IPeak_uptr
SpecialCoordinateSystem
Special coordinate systems for Q3D.
std::vector< dimsize_t > DimVector
Helper class which provides the Collimation Length for SANS instruments.
std::string to_string(const wide_integer< Bits, Signed > &n)