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