From 0c83614ca01dda201e0ca9b51efc11c7ec1f9cc3 Mon Sep 17 00:00:00 2001
From: Mathieu Doucet <doucetm@ornl.gov>
Date: Wed, 4 Aug 2010 19:52:24 +0000
Subject: [PATCH] Parallelize some of the calculations. Re #1442

---
 .../src/CalculateTransmissionBeamSpreader.cpp | 23 +++++++++++++++----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/Code/Mantid/Algorithms/src/CalculateTransmissionBeamSpreader.cpp b/Code/Mantid/Algorithms/src/CalculateTransmissionBeamSpreader.cpp
index 504ce3fcd73..be6c507f113 100644
--- a/Code/Mantid/Algorithms/src/CalculateTransmissionBeamSpreader.cpp
+++ b/Code/Mantid/Algorithms/src/CalculateTransmissionBeamSpreader.cpp
@@ -4,7 +4,6 @@
 #include "MantidAlgorithms/CalculateTransmissionBeamSpreader.h"
 #include "MantidAPI/WorkspaceValidators.h"
 #include "MantidAPI/SpectraDetectorMap.h"
-#include <cmath>
 
 namespace Mantid
 {
@@ -109,11 +108,25 @@ void CalculateTransmissionBeamSpreader::exec()
   MatrixWorkspace_sptr direct_spreader_mon = this->extractSpectrum(direct_spreaderWS,indices[0]);
 
   // Sum the whole detector for each of the four data sets
-  MatrixWorkspace_sptr sample_scatter_sum = this->sumSpectra(sample_scatterWS);
-  MatrixWorkspace_sptr direct_scatter_sum = this->sumSpectra(direct_scatterWS);
-  MatrixWorkspace_sptr sample_spreader_sum = this->sumSpectra(sample_spreaderWS);
-  MatrixWorkspace_sptr direct_spreader_sum = this->sumSpectra(direct_spreaderWS);
+  MatrixWorkspace_sptr sample_scatter_sum;
+  MatrixWorkspace_sptr direct_scatter_sum;
+  MatrixWorkspace_sptr sample_spreader_sum;
+  MatrixWorkspace_sptr direct_spreader_sum;
 
+  PRAGMA(omp parallel)
+  {
+    PRAGMA(omp sections nowait)
+    {
+      PRAGMA(omp section)
+        sample_scatter_sum = this->sumSpectra(sample_scatterWS);
+      PRAGMA(omp section)
+        direct_scatter_sum = this->sumSpectra(direct_scatterWS);
+      PRAGMA(omp section)
+        sample_spreader_sum = this->sumSpectra(sample_spreaderWS);
+      PRAGMA(omp section)
+        direct_spreader_sum = this->sumSpectra(direct_spreaderWS);
+    }
+  }
   // Beam spreader transmission
   MatrixWorkspace_sptr spreader_trans = WorkspaceFactory::Instance().create("WorkspaceSingleValue", 1, 1, 1);
   spreader_trans->setYUnit("");
-- 
GitLab