Commit 65523811 authored by Hahn, Steven's avatar Hahn, Steven
Browse files

Merge remote-tracking branch 'origin/master' into peaksworkspace_dock

parents d9ebdb8e 639c21d2
<!-- TEMPLATE FOR BUG REPORTS -->
### Expected behavior
### Actual behavior
### Steps to reproduce the behavior
### Platforms affected
......@@ -157,6 +157,7 @@ private:
/// Peak profile type
std::string m_peakType;
/// Criterias for fitting peak
std::string m_minimizer;
double m_maxChiSq;
double m_minPeakHeight;
double m_leastMaxObsY;
......
......@@ -34,10 +34,6 @@ namespace Algorithms {
*/
class MANTID_ALGORITHMS_DLL MaxentEntropyPositiveValues : public MaxentEntropy {
public:
// Constructor
MaxentEntropyPositiveValues() = default;
// Destructor
virtual ~MaxentEntropyPositiveValues() = default;
// First derivative
double getDerivative(double value) override;
// Second derivative
......
......@@ -3,6 +3,7 @@
#include "MantidAPI/CompositeFunction.h"
#include "MantidAPI/FileProperty.h"
#include "MantidAPI/FunctionFactory.h"
#include "MantidAPI/FuncMinimizerFactory.h"
#include "MantidAPI/ITableWorkspace.h"
#include "MantidAPI/IPeakFunction.h"
#include "MantidAPI/IBackgroundFunction.h"
......@@ -14,6 +15,7 @@
#include "MantidDataObjects/OffsetsWorkspace.h"
#include "MantidKernel/ArrayProperty.h"
#include "MantidKernel/ListValidator.h"
#include "MantidKernel/StartsWithValidator.h"
#include "MantidKernel/Statistics.h"
#include "MantidKernel/VectorHelper.h"
......@@ -123,12 +125,12 @@ DECLARE_ALGORITHM(GetDetOffsetsMultiPeaks)
*/
GetDetOffsetsMultiPeaks::GetDetOffsetsMultiPeaks()
: API::Algorithm(), m_inputWS(), m_eventW(), m_isEvent(false), m_backType(),
m_peakType(), m_maxChiSq(0.), m_minPeakHeight(0.), m_leastMaxObsY(0.),
m_maxOffset(0.), m_peakPositions(), m_fitWindows(), m_inputResolutionWS(),
m_hasInputResolution(false), m_minResFactor(0.), m_maxResFactor(0.),
m_outputW(), m_outputNP(), m_maskWS(), m_infoTableWS(),
m_peakOffsetTableWS(), m_resolutionWS(), m_useFitWindowTable(false),
m_vecFitWindow() {}
m_peakType(), m_minimizer(), m_maxChiSq(0.), m_minPeakHeight(0.),
m_leastMaxObsY(0.), m_maxOffset(0.), m_peakPositions(), m_fitWindows(),
m_inputResolutionWS(), m_hasInputResolution(false), m_minResFactor(0.),
m_maxResFactor(0.), m_outputW(), m_outputNP(), m_maskWS(),
m_infoTableWS(), m_peakOffsetTableWS(), m_resolutionWS(),
m_useFitWindowTable(false), m_vecFitWindow() {}
//----------------------------------------------------------------------------------------------
/** Destructor
......@@ -159,8 +161,8 @@ void GetDetOffsetsMultiPeaks::init() {
"Name of the input Tableworkspace containing peak fit window "
"information for each spectrum. ");
std::vector<std::string> peaktypes{"BackToBackExponential", "Gaussian",
"Lorentzian"};
std::vector<std::string> peaktypes =
FunctionFactory::Instance().getFunctionNames<API::IPeakFunction>();
declareProperty("PeakFunction", "Gaussian",
boost::make_shared<StringListValidator>(peaktypes),
"Type of peak to fit");
......@@ -204,6 +206,13 @@ void GetDetOffsetsMultiPeaks::init() {
"this peak will not be fit. It is designed for EventWorkspace with "
"integer counts.");
std::vector<std::string> minimizerOptions =
API::FuncMinimizerFactory::Instance().getKeys();
declareProperty("Minimizer", "Levenberg-MarquardtMD",
Kernel::IValidator_sptr(
new Kernel::StartsWithValidator(minimizerOptions)),
"Minimizer to use for fitting peaks.");
// Disable default gsl error handler (which is to call abort!)
gsl_set_error_handler_off();
......@@ -344,6 +353,7 @@ void GetDetOffsetsMultiPeaks::processProperties() {
// The maximum allowable chisq value for an individual peak fit
m_maxChiSq = this->getProperty("MaxChiSq");
m_minPeakHeight = this->getProperty("MinimumPeakHeight");
m_minimizer = getPropertyValue("Minimizer");
m_maxOffset = getProperty("MaxOffset");
m_leastMaxObsY = getProperty("MinimumPeakHeightObs");
......@@ -909,6 +919,7 @@ int GetDetOffsetsMultiPeaks::fitSpectra(
findpeaks->setProperty<int>("MinGuessedPeakWidth", 4);
findpeaks->setProperty<int>("MaxGuessedPeakWidth", 4);
findpeaks->setProperty<double>("MinimumPeakHeight", m_minPeakHeight);
findpeaks->setProperty<std::string>("Minimizer", m_minimizer);
findpeaks->setProperty("StartFromObservedPeakCentre", true);
findpeaks->executeAsChildAlg();
......
......@@ -234,25 +234,20 @@ void ReflectometryReductionOne::init() {
setPropertyGroup("StartOverlap", "Transmission");
setPropertyGroup("EndOverlap", "Transmission");
// Only do transmission corrections when point detector.
setPropertySettings(
"FirstTransmissionRun",
Kernel::make_unique<Kernel::EnabledWhenProperty>(
"AnalysisMode", IS_EQUAL_TO, "PointDetectorAnalysis"));
setPropertySettings(
"SecondTransmissionRun",
Kernel::make_unique<Kernel::EnabledWhenProperty>(
"AnalysisMode", IS_EQUAL_TO, "PointDetectorAnalysis"));
setPropertySettings(
"Params", Kernel::make_unique<Kernel::EnabledWhenProperty>(
"AnalysisMode", IS_EQUAL_TO, "PointDetectorAnalysis"));
setPropertySettings(
"StartOverlap",
Kernel::make_unique<Kernel::EnabledWhenProperty>(
"AnalysisMode", IS_EQUAL_TO, "PointDetectorAnalysis"));
setPropertySettings(
"EndOverlap", Kernel::make_unique<Kernel::EnabledWhenProperty>(
"AnalysisMode", IS_EQUAL_TO, "PointDetectorAnalysis"));
// Only ask for transmission parameters when a FirstTranmissionRun has been
// provided
setPropertySettings("SecondTransmissionRun",
Kernel::make_unique<Kernel::EnabledWhenProperty>(
"FirstTransmissionRun", IS_NOT_DEFAULT));
setPropertySettings("Params",
Kernel::make_unique<Kernel::EnabledWhenProperty>(
"FirstTransmissionRun", IS_NOT_DEFAULT));
setPropertySettings("StartOverlap",
Kernel::make_unique<Kernel::EnabledWhenProperty>(
"FirstTransmissionRun", IS_NOT_DEFAULT));
setPropertySettings("EndOverlap",
Kernel::make_unique<Kernel::EnabledWhenProperty>(
"FirstTransmissionRun", IS_NOT_DEFAULT));
// Only use region of direct beam when in multi-detector analysis mode.
setPropertySettings(
......
......@@ -60,6 +60,10 @@ public:
setMatrixWorkspace(boost::shared_ptr<const API::MatrixWorkspace> workspace,
size_t wsIndex, double startX, double endX) override;
/// Initiate a Y-space value chache rebuild when workspace of mass are
/// changed.
void buildCaches();
/// Pre-calculate the Y-space values with specified resolution parameters
void cacheYSpaceValues(const std::vector<double> &tseconds,
const bool isHistogram,
......@@ -85,11 +89,17 @@ public:
fillConstraintMatrix(Kernel::DblMatrix &cmatrix, const size_t start,
const std::vector<double> &errors) const = 0;
void setParameter(size_t i, const double &value,
bool explicitlySet = true) override;
void setParameter(const std::string &name, const double &value,
bool explicitlySet = true) override {
ParamFunction::setParameter(name, value, explicitlySet);
}
protected:
/// Declare parameters that will never participate in the fit
void declareAttributes() override;
/// Set an attribute value (and possibly cache its value)
void setAttribute(const std::string &name, const Attribute &value) override;
void declareParameters() override;
/// Access y-values cache
inline const std::vector<double> &ySpace() const { return m_yspace; }
......@@ -116,10 +126,13 @@ protected:
/// Logger
mutable Kernel::Logger m_log;
/// Current workspace
boost::shared_ptr<const API::MatrixWorkspace> m_workspace;
/// Current workspace index, required to access instrument parameters
size_t m_wsIndex;
/// Store the mass values
double m_mass;
double m_startX;
double m_endX;
/// Voigt function
boost::shared_ptr<API::IPeakFunction> m_voigt;
......@@ -134,6 +147,8 @@ protected:
std::vector<double> m_modQ;
/// Incident energies
std::vector<double> m_e0;
/// Atomic mass
double m_mass;
///@}
};
......
......@@ -404,6 +404,10 @@ void CalculateGammaBackground::calculateTofSpectrum(
profileFunction->getFunction(i));
profile->disableLogging();
profile->setUpForFit();
// Fix the Mass parameter
profile->fix(0);
profile->cacheYSpaceValues(tseconds, false, detpar, respar);
profile->massProfile(tmpWork.data(), tmpWork.size());
......
......@@ -28,8 +28,8 @@ const char *MASS_NAME = "Mass";
*/
ComptonProfile::ComptonProfile()
: API::ParamFunction(), API::IFunction1D(), m_log("ComptonProfile"),
m_wsIndex(0), m_mass(0.0), m_voigt(), m_resolutionFunction(), m_yspace(),
m_modQ(), m_e0() {
m_wsIndex(0), m_voigt(), m_resolutionFunction(), m_yspace(), m_modQ(),
m_e0() {
using namespace Mantid::API;
m_resolutionFunction = boost::dynamic_pointer_cast<VesuvioResolution>(
......@@ -77,9 +77,6 @@ void ComptonProfile::setUpForFit() {
void ComptonProfile::setMatrixWorkspace(
boost::shared_ptr<const API::MatrixWorkspace> workspace, size_t wsIndex,
double startX, double endX) {
UNUSED_ARG(startX);
UNUSED_ARG(endX);
auto inst = workspace->getInstrument();
auto sample = inst->getSample();
auto source = inst->getSource();
......@@ -87,10 +84,18 @@ void ComptonProfile::setMatrixWorkspace(
throw std::invalid_argument(
"ComptonProfile - Workspace has no source/sample.");
}
m_workspace = workspace;
m_wsIndex = wsIndex;
m_startX = startX;
m_endX = endX;
buildCaches();
}
void ComptonProfile::buildCaches() {
Geometry::IDetector_const_sptr det;
try {
det = workspace->getDetector(m_wsIndex);
det = m_workspace->getDetector(m_wsIndex);
} catch (Kernel::Exception::NotFoundError &) {
throw std::invalid_argument("ComptonProfile - Workspace has no detector "
"attached to histogram at index " +
......@@ -98,18 +103,20 @@ void ComptonProfile::setMatrixWorkspace(
}
m_resolutionFunction->setAttributeValue("Mass", m_mass);
m_resolutionFunction->setMatrixWorkspace(workspace, wsIndex, startX, endX);
m_resolutionFunction->setMatrixWorkspace(m_workspace, m_wsIndex, m_startX,
m_endX);
Algorithms::DetectorParams detpar =
ConvertToYSpace::getDetectorParameters(workspace, m_wsIndex);
this->cacheYSpaceValues(workspace->readX(m_wsIndex),
workspace->isHistogramData(), detpar);
ConvertToYSpace::getDetectorParameters(m_workspace, m_wsIndex);
this->cacheYSpaceValues(m_workspace->readX(m_wsIndex),
m_workspace->isHistogramData(), detpar);
}
void ComptonProfile::cacheYSpaceValues(const std::vector<double> &tseconds,
const bool isHistogram,
const Algorithms::DetectorParams &detpar,
const ResolutionParams &respar) {
m_resolutionFunction->setAttributeValue("Mass", m_mass);
m_resolutionFunction->cacheResolutionComponents(detpar, respar);
this->cacheYSpaceValues(tseconds, isHistogram, detpar);
}
......@@ -147,20 +154,21 @@ void ComptonProfile::cacheYSpaceValues(
/**
*/
void ComptonProfile::declareAttributes() {
declareAttribute(MASS_NAME, IFunction::Attribute(m_mass));
void ComptonProfile::declareParameters() {
declareParameter(MASS_NAME, 0.0, "Atomic mass (amu)");
}
/**
* @param name The name of the attribute
* @param value The attribute's value
*/
void ComptonProfile::setAttribute(const std::string &name,
const Attribute &value) {
IFunction::setAttribute(name, value); // Make sure the base-class stores it
if (name == MASS_NAME) {
m_mass = value.asDouble();
void ComptonProfile::setParameter(size_t i, const double &value,
bool explicitlySet) {
ParamFunction::setParameter(i, value, explicitlySet);
// Mass parameter has changed, need to rebuild Y-space cache
if (i == parameterIndex(MASS_NAME) && m_mass != value) {
m_mass = value;
m_resolutionFunction->setAttributeValue("Mass", m_mass);
if (m_workspace)
buildCaches();
}
}
......
......@@ -32,9 +32,7 @@ std::string GaussianComptonProfile::name() const {
/**
*/
void GaussianComptonProfile::declareParameters() {
// DO NOT REORDER WITHOUT CHANGING THE getParameter AND
// intensityParameterIndices methods
//
ComptonProfile::declareParameters();
declareParameter(WIDTH_PARAM, 1.0, "Gaussian width parameter");
declareParameter(AMP_PARAM, 1.0, "Gaussian intensity parameter");
}
......@@ -75,7 +73,7 @@ size_t GaussianComptonProfile::fillConstraintMatrix(
*/
void GaussianComptonProfile::massProfile(double *result,
const size_t nData) const {
const double amplitude(getParameter(1));
const double amplitude(getParameter(AMP_PARAM));
this->massProfile(result, nData, amplitude);
}
......@@ -89,7 +87,7 @@ void GaussianComptonProfile::massProfile(double *result,
*/
void GaussianComptonProfile::massProfile(double *result, const size_t nData,
const double amplitude) const {
double lorentzPos(0.0), gaussWidth(getParameter(0));
double lorentzPos(0.0), gaussWidth(getParameter(WIDTH_PARAM));
double gaussFWHM =
std::sqrt(std::pow(m_resolutionFunction->resolutionFWHM(), 2) +
std::pow(2.0 * STDDEV_TO_HWHM * gaussWidth, 2));
......
......@@ -17,29 +17,29 @@ public:
static ComptonProfileTest *createSuite() { return new ComptonProfileTest(); }
static void destroySuite(ComptonProfileTest *suite) { delete suite; }
void test_initialized_object_has_no_parameters() {
void test_initialized_object_has_no_attributes() {
auto profile = createFunction();
TS_ASSERT_EQUALS(0, profile->nParams());
TS_ASSERT_EQUALS(0, profile->nAttributes());
}
void test_initialized_object_has_expected_attributes() {
void test_initialized_object_has_expected_parameters() {
auto profile = createFunction();
static const size_t nattrs(1);
const char *expectedAttrs[nattrs] = {"Mass"};
static const size_t nparams(1);
const char *expectedParams[nparams] = {"Mass"};
TS_ASSERT_EQUALS(nattrs, profile->nAttributes());
TS_ASSERT_EQUALS(nparams, profile->nParams());
// Test names as they are used in scripts
if (profile->nAttributes() > 0) {
std::unordered_set<std::string> expectedAttrSet(expectedAttrs,
expectedAttrs + nattrs);
std::vector<std::string> actualNames = profile->getAttributeNames();
if (profile->nParams() > 0) {
std::unordered_set<std::string> expectedParamStr(
expectedParams, expectedParams + nparams);
std::vector<std::string> actualNames = profile->getParameterNames();
for (size_t i = 0; i < nattrs; ++i) {
for (size_t i = 0; i < nparams; ++i) {
const std::string &name = actualNames[i];
size_t keyCount = expectedAttrSet.count(name);
size_t keyCount = expectedParamStr.count(name);
TSM_ASSERT_EQUALS("Expected " + name +
" to be found as attribute but it was not.",
" to be found as parameter but it was not.",
1, keyCount);
}
}
......
......@@ -129,8 +129,10 @@ public:
func->iterationStarting();
TS_ASSERT_DELTA(func->getParameter(0), 5.0, 1e-10);
TS_ASSERT_DELTA(func->getParameter(1), 0.5, 1e-10);
TS_ASSERT_DELTA(func->getParameter(2), 10.0, 1e-10);
TS_ASSERT_DELTA(func->getParameter(3), 0.5, 1e-10);
TS_ASSERT_DELTA(func->getParameter(2), 1.0, 1e-10);
TS_ASSERT_DELTA(func->getParameter(3), 10.0, 1e-10);
TS_ASSERT_DELTA(func->getParameter(4), 0.5, 1e-10);
TS_ASSERT_DELTA(func->getParameter(5), 1.0, 1e-10);
}
void
......@@ -151,8 +153,10 @@ public:
func->iterationStarting();
TS_ASSERT_DELTA(func->getParameter(0), 5.0, 1e-10); // width_1
TS_ASSERT_DELTA(func->getParameter(1), 0.6666666633, 1e-10); // I_1
TS_ASSERT_DELTA(func->getParameter(2), 10.0, 1e-10); // width_2
TS_ASSERT_DELTA(func->getParameter(3), 0.3333333317, 1e-10); // I_2
TS_ASSERT_DELTA(func->getParameter(2), 1.0, 1e-10);
TS_ASSERT_DELTA(func->getParameter(3), 10.0, 1e-10); // width_2
TS_ASSERT_DELTA(func->getParameter(4), 0.3333333317, 1e-10); // I_2
TS_ASSERT_DELTA(func->getParameter(5), 1.0, 1e-10);
}
void
......@@ -177,9 +181,11 @@ public:
1e-8); // first mass intensity 1
TS_ASSERT_DELTA(func->getParameter(2), 0.33333333,
1e-8); // first mass intensity 2
TS_ASSERT_DELTA(func->getParameter(3), 10.0, 1e-10); // width_2
TS_ASSERT_DELTA(func->getParameter(4), 0.33333333,
TS_ASSERT_DELTA(func->getParameter(3), 1.0, 1e-10);
TS_ASSERT_DELTA(func->getParameter(4), 10.0, 1e-10); // width_2
TS_ASSERT_DELTA(func->getParameter(5), 0.33333333,
1e-8); // second mass intensity
TS_ASSERT_DELTA(func->getParameter(6), 1.0, 1e-10);
}
void
......@@ -306,15 +312,17 @@ private:
func1 = boost::make_shared<ComptonProfileStub>();
func1->initialize();
}
func1->setAttributeValue("Mass", 1.0);
func1->setParameter("Mass", 1.0);
func1->setParameter("Width", 5.0);
func1->setParameter("Intensity", 2.0);
func1->addTies("Mass=1.0");
auto func2 = boost::make_shared<ComptonProfileStub>();
func2->initialize();
func2->setAttributeValue("Mass", 1.0);
func2->setParameter("Mass", 1.0);
func2->setParameter("Width", 10.0);
func2->setParameter("Intensity", 3.0);
func2->addTies("Mass=1.0");
auto profile = boost::make_shared<ComptonScatteringCountRate>();
profile->initialize();
......
......@@ -27,8 +27,8 @@ public:
void test_Initialized_Function_Has_Expected_Parameters_In_Right_Order() {
Mantid::API::IFunction_sptr profile = createFunction();
static const size_t nparams(2);
const char *expectedParams[nparams] = {"Width", "Intensity"};
static const size_t nparams(3);
const char *expectedParams[nparams] = {"Mass", "Width", "Intensity"};
auto currentNames = profile->getParameterNames();
const size_t nnames = currentNames.size();
......@@ -47,29 +47,6 @@ public:
TS_ASSERT_EQUALS(1, intensityIndices.size());
}
void test_Initialized_Function_Has_Expected_Attributes() {
Mantid::API::IFunction_sptr profile = createFunction();
static const size_t nattrs(1);
const char *expectedAttrs[nattrs] = {"Mass"};
TS_ASSERT_EQUALS(nattrs, profile->nAttributes());
// Test names as they are used in scripts
if (profile->nAttributes() > 0) {
std::unordered_set<std::string> expectedAttrSet(expectedAttrs,
expectedAttrs + nattrs);
std::vector<std::string> actualNames = profile->getAttributeNames();
for (size_t i = 0; i < nattrs; ++i) {
const std::string &name = actualNames[i];
size_t keyCount = expectedAttrSet.count(name);
TSM_ASSERT_EQUALS("Expected " + name +
" to be found as attribute but it was not.",
1, keyCount);
}
}
}
void test_Expected_Results_Returned_Given_Data() {
using namespace Mantid::API;
......@@ -105,7 +82,7 @@ public:
private:
boost::shared_ptr<GaussianComptonProfile> createFunctionWithParamsSet() {
auto func = createFunction();
func->setAttributeValue("Mass", 30.0);
func->setParameter("Mass", 30.0);
func->setParameter("Intensity", 4.0);
func->setParameter("Width", 13.0);
func->setUpForFit();
......
......@@ -44,7 +44,7 @@ public:
checkDefaultAttrsExist(*profile);
checkDefaultParametersExist(*profile);
static const size_t npars(4);
static const size_t npars(5);
TS_ASSERT_EQUALS(npars, profile->nParams());
if (npars == profile->nParams()) {
......@@ -102,11 +102,11 @@ public:
private:
Mantid::API::IFunction_sptr createFunctionWithParamsSet() {
auto func = createFunction();
func->setAttributeValue("Mass", 1.0);
// must be before C_0 C_4 parameter calls as they are created by this
// attribute
func->setAttributeValue("HermiteCoeffs", "1 0 1");
func->setParameter("Mass", 1.0);
func->setParameter("C_0", 21.0);
func->setParameter("C_4", 33.0);
func->setParameter("FSECoeff", 0.82);
......@@ -122,13 +122,13 @@ private:
}
void checkDefaultAttrsExist(const Mantid::API::IFunction &profile) {
static const size_t nattrs = 2;
static const size_t nattrs = 1;
TS_ASSERT_LESS_THAN_EQUALS(nattrs, profile.nAttributes()); // at least
// nattrs
// Test names as they are used in scripts
if (nattrs <= profile.nAttributes()) {
const char *attrAarr[nattrs] = {"Mass", "HermiteCoeffs"};
const char *attrAarr[nattrs] = {"HermiteCoeffs"};
std::unordered_set<std::string> expectedAttrs(attrAarr,
attrAarr + nattrs);
std::vector<std::string> actualNames = profile.getAttributeNames();
......@@ -143,8 +143,8 @@ private:
}
void checkDefaultParametersExist(const Mantid::API::IFunction &profile) {
static const size_t nparams(2);
const char *expectedParams[nparams] = {"Width", "FSECoeff"};
static const size_t nparams(3);
const char *expectedParams[nparams] = {"Mass", "Width", "FSECoeff"};
auto currentNames = profile.getParameterNames();
const size_t nnames = currentNames.size();
......
......@@ -160,6 +160,7 @@ set ( SRC_FILES
src/SetSampleMaterial.cpp
src/SetScalingPSD.cpp
src/SortTableWorkspace.cpp
src/StartAndEndTimeFromNexusFileExtractor.cpp
src/UpdateInstrumentFromFile.cpp
src/XmlHandler.cpp
)
......@@ -321,6 +322,7 @@ set ( INC_FILES
inc/MantidDataHandling/SetSampleMaterial.h
inc/MantidDataHandling/SetScalingPSD.h
inc/MantidDataHandling/SortTableWorkspace.h
inc/MantidDataHandling/StartAndEndTimeFromNexusFileExtractor.h
inc/MantidDataHandling/UpdateInstrumentFromFile.h
inc/MantidDataHandling/XmlHandler.h
src/LoadRaw/byte_rel_comp.h
......@@ -339,9 +341,9 @@ set ( TEST_FILES
CreateModeratorModelTest.h
CreateSampleShapeTest.h
CreateSimulationWorkspaceTest.h
DataBlockTest.h
DataBlockCompositeTest.h
DataBlockGeneratorTest.h
DataBlockTest.h
DefineGaugeVolumeTest.h
DeleteTableRowsTest.h
DetermineChunkingTest.h
......@@ -474,6 +476,7 @@ set ( TEST_FILES
SetSampleMaterialTest.h
SetScalingPSDTest.h
SortTableWorkspaceTest.h
StartAndEndTimeFromNexusFileExtractorTest.h
UpdateInstrumentFromFileTest.h
XMLInstrumentParameterTest.h
)
......
......@@ -68,6 +68,8 @@ private:
void applyDetectorMapping();
/// Apply any instrument adjustments from the file
void adjustInstrument(const std::string &filename);
/// Set start date for dummy workspace
void setStartDate(API::MatrixWorkspace_sptr workspace);