From 1225e56598794dcf67de925a1852dfc3d1949068 Mon Sep 17 00:00:00 2001
From: Simon Heybrock <simon.heybrock@esss.se>
Date: Thu, 19 Oct 2017 15:48:59 +0200
Subject: [PATCH] Re #20887. Use communicator from workspace in parallel
 loader.

Do not default to WORLD anymore. This is needed for unit testing on the
algorithm level.
---
 Framework/DataHandling/src/ParallelEventLoader.cpp         | 3 ++-
 Framework/Indexing/inc/MantidIndexing/IndexInfo.h          | 2 +-
 Framework/Indexing/src/IndexInfo.cpp                       | 2 +-
 Framework/Parallel/inc/MantidParallel/IO/EventLoader.h     | 5 +++--
 .../Parallel/inc/MantidParallel/IO/EventLoaderHelpers.h    | 4 ++--
 Framework/Parallel/src/IO/EventLoader.cpp                  | 7 ++++---
 6 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/Framework/DataHandling/src/ParallelEventLoader.cpp b/Framework/DataHandling/src/ParallelEventLoader.cpp
index 36b47f5bc66..a595ed44753 100644
--- a/Framework/DataHandling/src/ParallelEventLoader.cpp
+++ b/Framework/DataHandling/src/ParallelEventLoader.cpp
@@ -1,6 +1,7 @@
 #include "MantidDataHandling/ParallelEventLoader.h"
 #include "MantidDataObjects/EventWorkspace.h"
 #include "MantidGeometry/Instrument/DetectorInfo.h"
+#include "MantidIndexing/IndexInfo.h"
 #include "MantidParallel/IO/EventLoader.h"
 #include "MantidTypes/SpectrumDefinition.h"
 #include "MantidTypes/Event/TofEvent.h"
@@ -54,7 +55,7 @@ void ParallelEventLoader::load(DataObjects::EventWorkspace &ws,
     DataObjects::getEventsFrom(ws.getSpectrum(i), eventLists[i]);
 
   Parallel::IO::EventLoader::load(
-      filename, groupName, bankNames,
+      ws.indexInfo().communicator(), filename, groupName, bankNames,
       bankOffsets(ws, filename, groupName, bankNames), std::move(eventLists));
 }
 
diff --git a/Framework/Indexing/inc/MantidIndexing/IndexInfo.h b/Framework/Indexing/inc/MantidIndexing/IndexInfo.h
index a9e3267c6cf..771ee432983 100644
--- a/Framework/Indexing/inc/MantidIndexing/IndexInfo.h
+++ b/Framework/Indexing/inc/MantidIndexing/IndexInfo.h
@@ -117,7 +117,7 @@ public:
   bool isOnThisPartition(GlobalSpectrumIndex globalIndex) const;
 
   Parallel::StorageMode storageMode() const;
-  Parallel::Communicator communicator() const;
+  const Parallel::Communicator &communicator() const;
 
 private:
   void makeSpectrumNumberTranslator(
diff --git a/Framework/Indexing/src/IndexInfo.cpp b/Framework/Indexing/src/IndexInfo.cpp
index ed94a21c0f3..65a0d614fb5 100644
--- a/Framework/Indexing/src/IndexInfo.cpp
+++ b/Framework/Indexing/src/IndexInfo.cpp
@@ -205,7 +205,7 @@ bool IndexInfo::isOnThisPartition(GlobalSpectrumIndex globalIndex) const {
 Parallel::StorageMode IndexInfo::storageMode() const { return m_storageMode; }
 
 /// Returns the communicator used in MPI runs.
-Parallel::Communicator IndexInfo::communicator() const {
+const Parallel::Communicator &IndexInfo::communicator() const {
   return *m_communicator;
 }
 
diff --git a/Framework/Parallel/inc/MantidParallel/IO/EventLoader.h b/Framework/Parallel/inc/MantidParallel/IO/EventLoader.h
index aea1261e500..caa8437fe15 100644
--- a/Framework/Parallel/inc/MantidParallel/IO/EventLoader.h
+++ b/Framework/Parallel/inc/MantidParallel/IO/EventLoader.h
@@ -16,6 +16,7 @@ class TofEvent;
 }
 }
 namespace Parallel {
+class Communicator;
 namespace IO {
 
 /** Loader for event data from Nexus files with parallelism based on multiple
@@ -50,8 +51,8 @@ MANTID_PARALLEL_DLL std::vector<boost::optional<int32_t>>
 anyEventIdFromBanks(const std::string &filename, const std::string &groupName,
                     const std::vector<std::string> &bankNames);
 MANTID_PARALLEL_DLL void
-load(const std::string &filename, const std::string &groupName,
-     const std::vector<std::string> &bankNames,
+load(const Communicator &communicator, const std::string &filename,
+     const std::string &groupName, const std::vector<std::string> &bankNames,
      const std::vector<int32_t> &bankOffsets,
      std::vector<std::vector<Types::Event::TofEvent> *> eventLists);
 }
diff --git a/Framework/Parallel/inc/MantidParallel/IO/EventLoaderHelpers.h b/Framework/Parallel/inc/MantidParallel/IO/EventLoaderHelpers.h
index f5046221ce5..972ab0881cd 100644
--- a/Framework/Parallel/inc/MantidParallel/IO/EventLoaderHelpers.h
+++ b/Framework/Parallel/inc/MantidParallel/IO/EventLoaderHelpers.h
@@ -91,13 +91,13 @@ void load(const Chunker &chunker, NXEventDataSource<TimeOffsetType> &dataSource,
 }
 
 template <class TimeOffsetType>
-void load(const H5::Group &group, const std::vector<std::string> &bankNames,
+void load(const Communicator &comm, const H5::Group &group,
+          const std::vector<std::string> &bankNames,
           const std::vector<int32_t> &bankOffsets,
           std::vector<std::vector<Types::Event::TofEvent> *> eventLists) {
   // TODO automatically(?) determine good chunk size
   // TODO automatically(?) determine good number of ranks to use for load
   const size_t chunkSize = 1024 * 1024;
-  Communicator comm;
   const Chunker chunker(comm.size(), comm.rank(),
                         readBankSizes(group, bankNames), chunkSize);
   NXEventDataLoader<TimeOffsetType> loader(comm.size(), group, bankNames);
diff --git a/Framework/Parallel/src/IO/EventLoader.cpp b/Framework/Parallel/src/IO/EventLoader.cpp
index a19b3b64a0f..cf6f709ea3e 100644
--- a/Framework/Parallel/src/IO/EventLoader.cpp
+++ b/Framework/Parallel/src/IO/EventLoader.cpp
@@ -29,14 +29,15 @@ anyEventIdFromBanks(const std::string &filename, const std::string &groupName,
 }
 
 /// Load events from given banks into event lists.
-void load(const std::string &filename, const std::string &groupName,
+void load(const Communicator &comm, const std::string &filename,
+          const std::string &groupName,
           const std::vector<std::string> &bankNames,
           const std::vector<int32_t> &bankOffsets,
           std::vector<std::vector<Types::Event::TofEvent> *> eventLists) {
   H5::H5File file(filename, H5F_ACC_RDONLY);
   H5::Group group = file.openGroup(groupName);
-  load(readDataType(group, bankNames, "event_time_offset"), group, bankNames,
-       bankOffsets, std::move(eventLists));
+  load(readDataType(group, bankNames, "event_time_offset"), comm, group,
+       bankNames, bankOffsets, std::move(eventLists));
 }
 }
 
-- 
GitLab