From 97e700992cee970569e986c5cdcf6c1e2cd5e7f5 Mon Sep 17 00:00:00 2001 From: Pete Peterson <petersonpf@ornl.gov> Date: Thu, 11 Jun 2015 13:38:33 -0400 Subject: [PATCH] Adding back the v1 parameter OffsetsWorkspace --- .../inc/MantidAlgorithms/AlignDetectors2.h | 1 + .../Algorithms/src/AlignDetectors2.cpp | 59 ++++++++++++++----- .../src/AlignAndFocusPowder.cpp | 2 +- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/AlignDetectors2.h b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/AlignDetectors2.h index 65040298174..e91dfc79791 100644 --- a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/AlignDetectors2.h +++ b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/AlignDetectors2.h @@ -72,6 +72,7 @@ private: void execEvent(); void loadCalFile(API::MatrixWorkspace_sptr inputWS, const std::string & filename); + void getCalibrationWS(API::MatrixWorkspace_sptr inputWS); Mantid::API::ITableWorkspace_sptr m_calibrationWS; diff --git a/Code/Mantid/Framework/Algorithms/src/AlignDetectors2.cpp b/Code/Mantid/Framework/Algorithms/src/AlignDetectors2.cpp index 04358c7de6b..c3826a6f105 100644 --- a/Code/Mantid/Framework/Algorithms/src/AlignDetectors2.cpp +++ b/Code/Mantid/Framework/Algorithms/src/AlignDetectors2.cpp @@ -185,23 +185,42 @@ void AlignDetectors2::init() { "CalibrationWorkspace", "", Direction::Input, PropertyMode::Optional), "Optional: A Workspace containing the calibration information. Either " "this or CalibrationFile needs to be specified."); + + declareProperty( + new WorkspaceProperty<OffsetsWorkspace>( + "OffsetsWorkspace", "", Direction::Input, PropertyMode::Optional), + "Optional: A OffsetsWorkspace containing the calibration offsets. Either " + "this or CalibrationFile needs to be specified."); + + // make group associations. + std::string calibrationGroup("Calibration"); + setPropertyGroup("CalibrationFile", calibrationGroup); + setPropertyGroup("CalibrationWorkspace", calibrationGroup); + setPropertyGroup("OffsetsWorkspace", calibrationGroup); } std::map<std::string, std::string> AlignDetectors2::validateInputs() { std::map<std::string, std::string> result; + int numWays = 0; + const std::string calFileName = getProperty("CalibrationFile"); - bool haveCalFile = (!calFileName.empty()); + if (!calFileName.empty()) numWays+=1; ITableWorkspace_const_sptr calibrationWS = getProperty("CalibrationWorkspace"); - bool haveCalWksp = bool(calibrationWS); + if(bool(calibrationWS)) numWays+=1; + + OffsetsWorkspace_const_sptr offsetsWS = getProperty("OffsetsWorkspace"); + if(bool(offsetsWS)) numWays+=1; std::string message; - if (haveCalFile && haveCalWksp) { - message = "You must specify either CalibrationFile or " - "CalibrationWorkspace but not both."; - } else if ((!haveCalFile) && (!haveCalWksp)) { - message = "You must specify either CalibrationFile or CalibrationWorkspace."; + if (numWays == 0) { + message = "You must specify only one of CalibrationFile, " + "CalibrationWorkspace, OffsetsWorkspace."; + } + if (numWays > 1) { + message = "You must specify one of CalibrationFile, " + "CalibrationWorkspace, OffsetsWorkspace."; } if (!message.empty()) { @@ -242,6 +261,24 @@ void AlignDetectors2::loadCalFile(MatrixWorkspace_sptr inputWS, const std::strin } } +void AlignDetectors2::getCalibrationWS(MatrixWorkspace_sptr inputWS) { + const std::string calFileName = getPropertyValue("CalibrationFile"); + if (!calFileName.empty()) { + progress(0.0, "Reading calibration file"); + loadCalFile(inputWS, calFileName); + } else { + m_calibrationWS = getProperty("CalibrationWorkspace"); + if (!m_calibrationWS) { + OffsetsWorkspace_sptr offsetsWS = getProperty("OffsetsWorkspace"); + auto alg = createChildAlgorithm("ConvertDiffCal"); + alg->setProperty("OffsetsWorkspace", offsetsWS); + alg->executeAsChildAlg(); + m_calibrationWS = alg->getProperty("OutputWorkspace"); + m_calibrationWS->setTitle(offsetsWS->getTitle()); + } + } +} + void setXAxisUnits(API::MatrixWorkspace_sptr outputWS) { outputWS->getAxis(0)->unit() = UnitFactory::Instance().create("dSpacing"); } @@ -257,13 +294,7 @@ void AlignDetectors2::exec() { // Get the input workspace MatrixWorkspace_sptr inputWS = getProperty("InputWorkspace"); - const std::string calFileName = getPropertyValue("CalibrationFile"); - if (!calFileName.empty()) { - progress(0.0, "Reading calibration file"); - loadCalFile(inputWS, calFileName); - } else { - m_calibrationWS = getProperty("CalibrationWorkspace"); - } + this->getCalibrationWS(inputWS); // Initialise the progress reporting object m_numberOfSpectra = static_cast<int64_t>(inputWS->getNumberHistograms()); diff --git a/Code/Mantid/Framework/WorkflowAlgorithms/src/AlignAndFocusPowder.cpp b/Code/Mantid/Framework/WorkflowAlgorithms/src/AlignAndFocusPowder.cpp index 27c8e437d2b..b7ad3f6b09f 100644 --- a/Code/Mantid/Framework/WorkflowAlgorithms/src/AlignAndFocusPowder.cpp +++ b/Code/Mantid/Framework/WorkflowAlgorithms/src/AlignAndFocusPowder.cpp @@ -486,7 +486,7 @@ void AlignAndFocusPowder::exec() { if (m_offsetsWS) { g_log.information() << "running AlignDetectors\n"; - API::IAlgorithm_sptr alignAlg = createChildAlgorithm("AlignDetectors", 1); + API::IAlgorithm_sptr alignAlg = createChildAlgorithm("AlignDetectors"); alignAlg->setProperty("InputWorkspace", m_outputW); alignAlg->setProperty("OutputWorkspace", m_outputW); alignAlg->setProperty("OffsetsWorkspace", m_offsetsWS); -- GitLab