From 647e008c28722945e316320aec9bcdf781b6b57b Mon Sep 17 00:00:00 2001
From: Matthew Andrew <matthew.andrew@stfc.ac.uk>
Date: Fri, 30 Nov 2018 17:27:45 +0000
Subject: [PATCH] Added const's and changed to use isGroup Re #23642

---
 Framework/Muon/src/MuonPairingAsymmetry.cpp   | 60 +++++++++----------
 .../Muon/test/MuonPairingAsymmetryTest.h      | 58 +++++++++---------
 2 files changed, 58 insertions(+), 60 deletions(-)

diff --git a/Framework/Muon/src/MuonPairingAsymmetry.cpp b/Framework/Muon/src/MuonPairingAsymmetry.cpp
index 621e38d6190..6f5498934fe 100644
--- a/Framework/Muon/src/MuonPairingAsymmetry.cpp
+++ b/Framework/Muon/src/MuonPairingAsymmetry.cpp
@@ -23,25 +23,26 @@ using namespace Mantid::Kernel;
 
 namespace {
 bool checkPeriodInWorkspaceGroup(const int &period,
-                                 WorkspaceGroup_sptr workspace) {
+                                 WorkspaceGroup_const_sptr workspace) {
   return period <= workspace->getNumberOfEntries();
 }
 
-bool isMultiPeriod(Workspace_sptr ws) {
-  if (auto tmp = boost::dynamic_pointer_cast<WorkspaceGroup>(ws)) {
-    return true;
-  }
-  return false;
+bool isMultiPeriod(Workspace_const_sptr ws) {
+  return ws->isGroup();
 }
 
 int countPeriods(Workspace_sptr ws) {
-  auto tmp = boost::dynamic_pointer_cast<WorkspaceGroup>(ws);
-  return tmp->getNumberOfEntries();
+  if(auto tmp = boost::dynamic_pointer_cast<WorkspaceGroup>(ws)){
+    return tmp->getNumberOfEntries();
+  }
+  else {
+    return 1;
+  }
 }
 
 bool checkConsistentPeriods(Workspace_sptr ws1, Workspace_sptr ws2) {
-  if (isMultiPeriod(ws1)) {
-    if (!isMultiPeriod(ws2)) {
+  if (ws1->isGroup()) {
+    if (!ws2->isGroup()) {
       return false;
     }
     if (countPeriods(ws1) != countPeriods(ws2)) {
@@ -89,7 +90,7 @@ MatrixWorkspace_sptr groupDetectors(MatrixWorkspace_sptr workspace,
 WorkspaceGroup_sptr workspaceToWorkspaceGroup(Workspace_sptr workspace) {
 
   WorkspaceGroup_sptr ws1;
-  if (isMultiPeriod(workspace)) {
+  if (workspace->isGroup()) {
     ws1 = boost::dynamic_pointer_cast<WorkspaceGroup>(workspace);
   } else {
     ws1 = boost::make_shared<WorkspaceGroup>();
@@ -108,8 +109,8 @@ DECLARE_ALGORITHM(MuonPairingAsymmetry)
 
 void MuonPairingAsymmetry::init() {
   std::string emptyString("");
-  std::vector<int> defaultGrouping1 = {1};
-  std::vector<int> defaultGrouping2 = {2};
+  const std::vector<int> defaultGrouping1 = {1};
+  const std::vector<int> defaultGrouping2 = {2};
 
   declareProperty(
       Mantid::Kernel::make_unique<WorkspaceProperty<MatrixWorkspace>>(
@@ -160,7 +161,6 @@ void MuonPairingAsymmetry::init() {
   setPropertySettings("InputWorkspace",
                       make_unique<Kernel::EnabledWhenProperty>(
                           "SpecifyGroupsManually", Kernel::IS_EQUAL_TO, "1"));
-
   declareProperty(make_unique<ArrayProperty<int>>(
                       "Group1", defaultGrouping1,
                       IValidator_sptr(new NullValidator), Direction::Input),
@@ -192,16 +192,16 @@ void MuonPairingAsymmetry::init() {
                           "SpecifyGroupsManually", Kernel::IS_EQUAL_TO, "1"));
 
   // Group common entries in the interface for clarity.
-  std::string workspaceGrp("Specify Group Workspaces");
+  const std::string workspaceGrp("Specify Group Workspaces");
   setPropertyGroup("InputWorkspace1", workspaceGrp);
   setPropertyGroup("InputWorkspace2", workspaceGrp);
 
-  std::string manualGroupGrp("Specify Detector ID Groups Manually");
+  const std::string manualGroupGrp("Specify Detector ID Groups Manually");
   setPropertyGroup("InputWorkspace", manualGroupGrp);
   setPropertyGroup("Group1", manualGroupGrp);
   setPropertyGroup("Group2", manualGroupGrp);
 
-  std::string periodGrp("Multi-period Data");
+  const std::string periodGrp("Multi-period Data");
   setPropertyGroup("SummedPeriods", periodGrp);
   setPropertyGroup("SubtractedPeriods", periodGrp);
 }
@@ -210,7 +210,7 @@ std::map<std::string, std::string> MuonPairingAsymmetry::validateInputs() {
   std::map<std::string, std::string> errors;
 
   // Pair name must be given, and must only contain characters, digits and "_"
-  std::string pairName = this->getProperty("PairName");
+  const std::string pairName = this->getProperty("PairName");
   if (pairName.empty()) {
     errors["PairName"] = "Pair name must be specified.";
   }
@@ -249,9 +249,8 @@ void MuonPairingAsymmetry::validateManualGroups(
     errors["Group2"] =
         "A valid grouping must be supplied (e.g. \"1,2,3,4,5\").";
   }
-  std::sort(group1.begin(), group1.end());
-  std::sort(group2.begin(), group2.end());
-  if (group1 == group2) {
+  
+  if (std::is_permutation(group1.begin(), group1.end(), group2.begin())) {
     errors["Group1"] = "The two groups must be different.";
   }
 
@@ -263,11 +262,11 @@ void MuonPairingAsymmetry::validateGroupsWorkspaces(
     std::map<std::string, std::string> &errors) {
   Workspace_sptr ws1 = this->getProperty("InputWorkspace1");
   Workspace_sptr ws2 = this->getProperty("InputWorkspace2");
-  if (isMultiPeriod(ws1) && !isMultiPeriod(ws2)) {
+  if (ws1->isGroup() && !ws2->isGroup())) {
     errors["InputWorkspace1"] =
         "InputWorkspace2 should be multi period to match InputWorkspace1";
   }
-  if (isMultiPeriod(ws2) && !isMultiPeriod(ws1)) {
+  if (ws2->isGroup() && !ws1->isGroup()) {
     errors["InputWorkspace2"] =
         "InputWorkspace1 should be multi period to match InputWorkspace2";
   }
@@ -275,7 +274,7 @@ void MuonPairingAsymmetry::validateGroupsWorkspaces(
     errors["InputWorkspace1"] = "InputWorkspace1 and InputWorkspace2 have "
                                 "inconsistent numbers of periods.";
   }
-  if (isMultiPeriod(ws1) && isMultiPeriod(ws2)) {
+  if (ws1->isGroup() && ws2->isGroup()) {
     validatePeriods(boost::dynamic_pointer_cast<WorkspaceGroup>(ws1), errors);
     validatePeriods(boost::dynamic_pointer_cast<WorkspaceGroup>(ws2), errors);
   }
@@ -328,8 +327,8 @@ MatrixWorkspace_sptr MuonPairingAsymmetry::execSpecifyGroupsManually() {
   auto groupedPeriods = createGroupWorkspace(inputWS);
 
   // Do the asymmetry calculation
-  std::vector<int> summedPeriods = getProperty("SummedPeriods");
-  std::vector<int> subtractedPeriods = getProperty("SubtractedPeriods");
+  const std::vector<int> summedPeriods = getProperty("SummedPeriods");
+  const std::vector<int> subtractedPeriods = getProperty("SubtractedPeriods");
   const double alpha = static_cast<double>(getProperty("Alpha"));
 
   return calcPairAsymmetryWithSummedAndSubtractedPeriods(
@@ -395,11 +394,10 @@ MuonPairingAsymmetry::pairAsymmetryCalc(MatrixWorkspace_sptr inputWS,
   // Ensure our specified spectra definitely point to the data
   inputWS->getSpectrum(0).setSpectrumNo(0);
   inputWS->getSpectrum(1).setSpectrumNo(1);
-  std::vector<int> fwdSpectra = {0};
-  std::vector<int> bwdSpectra = {1};
+  const std::vector<int> fwdSpectra = {0};
+  const std::vector<int> bwdSpectra = {1};
 
   IAlgorithm_sptr alg = this->createChildAlgorithm("AsymmetryCalc");
-  alg->setChild(true);
   alg->setProperty("InputWorkspace", inputWS);
   alg->setProperty("ForwardSpectra", fwdSpectra);
   alg->setProperty("BackwardSpectra", bwdSpectra);
@@ -442,8 +440,8 @@ MuonPairingAsymmetry::appendSpectra(MatrixWorkspace_sptr inputWS1,
 
 void MuonPairingAsymmetry::validatePeriods(
     WorkspaceGroup_sptr inputWS, std::map<std::string, std::string> &errors) {
-  std::vector<int> summedPeriods = getProperty("SummedPeriods");
-  std::vector<int> subtractedPeriods = getProperty("SubtractedPeriods");
+  const std::vector<int> summedPeriods = getProperty("SummedPeriods");
+  const std::vector<int> subtractedPeriods = getProperty("SubtractedPeriods");
   if (summedPeriods.empty() && subtractedPeriods.empty()) {
     errors["SummedPeriods"] = "At least one period must be specified";
   }
diff --git a/Framework/Muon/test/MuonPairingAsymmetryTest.h b/Framework/Muon/test/MuonPairingAsymmetryTest.h
index 94cfeef2cdf..874dcbd199d 100644
--- a/Framework/Muon/test/MuonPairingAsymmetryTest.h
+++ b/Framework/Muon/test/MuonPairingAsymmetryTest.h
@@ -58,8 +58,8 @@ IAlgorithm_sptr algorithmWithoutOptionalPropertiesSet(
 IAlgorithm_sptr
 setUpAlgorithmWithoutOptionalProperties(WorkspaceGroup_sptr ws,
                                         const std::string &name) {
-  std::vector<int> group1 = {1, 2};
-  std::vector<int> group2 = {3, 4};
+  const std::vector<int> group1 = {1, 2};
+  const std::vector<int> group2 = {3, 4};
 
   setUpADSWithWorkspace setup(ws);
   IAlgorithm_sptr alg = algorithmWithoutOptionalPropertiesSet(
@@ -222,8 +222,8 @@ public:
   }
 
   void test_that_non_empty_pair_name_must_be_supplied() {
-    std::vector<int> group1 = {1, 2};
-    std::vector<int> group2 = {3, 4};
+    const std::vector<int> group1 = {1, 2};
+    const std::vector<int> group2 = {3, 4};
 
     auto ws = createMultiPeriodWorkspaceGroup(2, 1, 10, "pair1");
     setUpADSWithWorkspace setup(ws);
@@ -235,8 +235,8 @@ public:
 
   void
   test_that_pair_names_with_alphanumeric_characters_or_underscores_are_allowed() {
-    std::vector<int> group1 = {1, 2};
-    std::vector<int> group2 = {3, 4};
+    const std::vector<int> group1 = {1, 2};
+    const std::vector<int> group2 = {3, 4};
     auto ws = createMultiPeriodWorkspaceGroup(2, 1, 10, "pairWS");
 
     std::vector<std::string> validNames = {"fwd", "fwd2", "bwd_2"};
@@ -248,8 +248,8 @@ public:
   }
 
   void test_that_exec_throws_if_pair_name_is_not_alphanumeric_or_underscored() {
-    std::vector<int> group1 = {1, 2};
-    std::vector<int> group2 = {3, 4};
+    const std::vector<int> group1 = {1, 2};
+    const std::vector<int> group2 = {3, 4};
     auto ws = createMultiPeriodWorkspaceGroup(2, 1, 10, "pair1");
 
     std::vector<std::string> invalidNames = {"@", "fwd!", "#1", "fwd @", "   "};
@@ -265,8 +265,8 @@ public:
   // --------------------------------------------------------------------------
 
   void test_that_exec_throws_if_alpha_is_negative() {
-    std::vector<int> group1 = {1, 2};
-    std::vector<int> group2 = {3, 4};
+    const std::vector<int> group1 = {1, 2};
+    const std::vector<int> group2 = {3, 4};
     auto ws = createMultiPeriodWorkspaceGroup(2, 1, 10, "pairWS");
     auto alg =
         algorithmWithoutOptionalPropertiesSet("pairWS", "pair", group1, group2);
@@ -312,7 +312,7 @@ public:
 
   void test_that_at_least_one_period_must_be_specified() {
     auto ws = createMultiPeriodWorkspaceGroup(2, 3, 10, "group");
-    std::vector<int> detectors = {1, 2};
+    const std::vector<int> detectors = {1, 2};
     auto alg = setUpAlgorithmWithoutOptionalProperties(ws, "pair1");
 
     std::vector<int> summedPeriods = {};
@@ -353,8 +353,8 @@ public:
   test_that_single_period_data_combines_detectors_correctly_for_manually_specified_detectors() {
     // 4 spectra per period, 10 bins
     auto ws = createMultiPeriodAsymmetryData(1, 4, 10, "pairWS");
-    std::vector<int> group1 = {1, 2};
-    std::vector<int> group2 = {3, 4};
+    const std::vector<int> group1 = {1, 2};
+    const std::vector<int> group2 = {3, 4};
 
     auto alg = setUpAlgorithmWithGroups(ws, group1, group2);
     alg->execute();
@@ -376,8 +376,8 @@ public:
   void
   test_that_single_period_data_combines_detectors_correctly_for_two_group_workspaces() {
 
-    std::vector<int> group1 = {1, 2};
-    std::vector<int> group2 = {3, 4};
+    const std::vector<int> group1 = {1, 2};
+    const std::vector<int> group2 = {3, 4};
     auto ws1 = createGroupWorkspace("fwd", group1, 1);
     auto ws2 = createGroupWorkspace("bwd", group2, 1);
 
@@ -409,8 +409,8 @@ public:
   test_that_multi_period_data_combines_detectors_correctly_for_manually_specified_detectors_and_summed_periods() {
 
     auto ws = createMultiPeriodAsymmetryData(2, 4, 10, "pairWS");
-    std::vector<int> group1 = {1, 2};
-    std::vector<int> group2 = {3, 4};
+    const std::vector<int> group1 = {1, 2};
+    const std::vector<int> group2 = {3, 4};
     auto alg = setUpAlgorithmWithGroups(ws, group1, group2);
     alg->setProperty("SummedPeriods", group1);
     alg->execute();
@@ -434,11 +434,11 @@ public:
   test_that_multi_period_data_combines_detectors_correctly_for_manually_specified_detectors_and_subtracted_periods() {
 
     auto ws = createMultiPeriodAsymmetryData(2, 4, 10, "pairWS");
-    std::vector<int> group1 = {1, 2};
-    std::vector<int> group2 = {3, 4};
+    const std::vector<int> group1 = {1, 2};
+    const std::vector<int> group2 = {3, 4};
     auto alg = setUpAlgorithmWithGroups(ws, group1, group2);
-    std::vector<int> summedPeriods = {1};
-    std::vector<int> subtractedPeriods = {2};
+    const std::vector<int> summedPeriods = {1};
+    const std::vector<int> subtractedPeriods = {2};
     alg->setProperty("SummedPeriods", summedPeriods);
     alg->setProperty("SubtractedPeriods", subtractedPeriods);
     alg->execute();
@@ -461,11 +461,11 @@ public:
   test_that_multi_period_data_combines_detectors_correctly_for_manually_specified_detectors_summed_and_subtracted_periods() {
 
     auto ws = createMultiPeriodAsymmetryData(3, 4, 10, "pairWS");
-    std::vector<int> group1 = {1, 2};
-    std::vector<int> group2 = {3, 4};
+    const std::vector<int> group1 = {1, 2};
+    const std::vector<int> group2 = {3, 4};
     auto alg = setUpAlgorithmWithGroups(ws, group1, group2);
-    std::vector<int> summedPeriods = {1, 2};
-    std::vector<int> subtractedPeriods = {3};
+    const std::vector<int> summedPeriods = {1, 2};
+    const std::vector<int> subtractedPeriods = {3};
     alg->setProperty("SummedPeriods", summedPeriods);
     alg->setProperty("SubtractedPeriods", subtractedPeriods);
     alg->execute();
@@ -487,14 +487,14 @@ public:
   void
   test_that_multi_period_data_combines_detectors_correctly_for_group_workspaces_summed_and_subtracted_periods() {
 
-    std::vector<int> group1 = {1, 2};
-    std::vector<int> group2 = {3, 4};
+    const std::vector<int> group1 = {1, 2};
+    const std::vector<int> group2 = {3, 4};
     auto ws1 = createMultiPeriodGroupedWorkspace("fwd", group1, 3);
     auto ws2 = createMultiPeriodGroupedWorkspace("bwd", group2, 3);
 
     auto alg = setUpAlgorithmWithGroupWorkspaceGroups(ws1, ws2);
-    std::vector<int> summedPeriods = {1, 2};
-    std::vector<int> subtractedPeriods = {3};
+    const std::vector<int> summedPeriods = {1, 2};
+    const std::vector<int> subtractedPeriods = {3};
     alg->setProperty("SummedPeriods", summedPeriods);
     alg->setProperty("SubtractedPeriods", subtractedPeriods);
     alg->execute();
-- 
GitLab