From 346f9eaa54e593bf89b3cd94243ae670b6e35efe Mon Sep 17 00:00:00 2001 From: Owen Arnold <owen.arnold@stfc.ac.uk> Date: Wed, 6 Aug 2014 08:30:49 +0100 Subject: [PATCH] refs #9955. Special treatment for errors too --- .../inc/MantidAlgorithms/Stitch1D.h | 8 ++- .../Framework/Algorithms/src/Stitch1D.cpp | 50 +++++++++++++++---- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/Stitch1D.h b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/Stitch1D.h index ac12465bf24..52a4044d884 100644 --- a/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/Stitch1D.h +++ b/Code/Mantid/Framework/Algorithms/inc/MantidAlgorithms/Stitch1D.h @@ -112,9 +112,13 @@ namespace Mantid /// Range tolerance static const double range_tolerance; /// Index per workspace spectra of Nans - SpecialTypeIndexes m_nanIndexes; + SpecialTypeIndexes m_nanYIndexes; /// Index per workspace spectra of Infs - SpecialTypeIndexes m_infIndexes; + SpecialTypeIndexes m_infYIndexes; + /// Index per workspace spectra of Nans + SpecialTypeIndexes m_nanEIndexes; + /// Index per workspace spectra of Infs + SpecialTypeIndexes m_infEIndexes; }; diff --git a/Code/Mantid/Framework/Algorithms/src/Stitch1D.cpp b/Code/Mantid/Framework/Algorithms/src/Stitch1D.cpp index 42718c2a993..98d5c433d2d 100644 --- a/Code/Mantid/Framework/Algorithms/src/Stitch1D.cpp +++ b/Code/Mantid/Framework/Algorithms/src/Stitch1D.cpp @@ -307,24 +307,40 @@ PARALLEL_FOR1(outWS) for (int i = 0; i < histogramCount; ++i) { PARALLEL_START_INTERUPT_REGION - std::vector<size_t>& nanIndexes = m_nanIndexes[i]; - std::vector<size_t>& infIndexes = m_infIndexes[i] ; + std::vector<size_t>& nanYIndexes = m_nanYIndexes[i]; + std::vector<size_t>& nanEIndexes = m_nanEIndexes[i]; + std::vector<size_t>& infYIndexes = m_infYIndexes[i]; + std::vector<size_t>& infEIndexes = m_infEIndexes[i]; // Copy over the data MantidVec& sourceY = outWS->dataY(i); + MantidVec& sourceE = outWS->dataE(i); for (size_t j = 0; j < sourceY.size(); ++j) { const double& value = sourceY[j]; + const double& eValue = sourceE[j]; if (isNan(value)) { - nanIndexes.push_back(j); + nanYIndexes.push_back(j); sourceY[j] = 0; } else if (isInf(value)) { - infIndexes.push_back(j); + infYIndexes.push_back(j); sourceY[j] = 0; } + + if(isNan(eValue)) + { + nanEIndexes.push_back(j); + sourceE[j] = 0; + } + else if(isInf(eValue)) + { + infEIndexes.push_back(j); + sourceE[j] = 0; + } + } PARALLEL_END_INTERUPT_REGION @@ -522,8 +538,10 @@ throw std::runtime_error(message); } const size_t histogramCount = rhsWS->getNumberHistograms(); -m_nanIndexes.resize(histogramCount); -m_infIndexes.resize(histogramCount); +m_nanYIndexes.resize(histogramCount); +m_infYIndexes.resize(histogramCount); +m_nanEIndexes.resize(histogramCount); +m_infEIndexes.resize(histogramCount); auto rebinnedLHS = rebin(lhsWS, params); auto rebinnedRHS = rebin(rhsWS, params); @@ -625,17 +643,27 @@ PARALLEL_START_INTERUPT_REGION // Copy over the data MantidVec& sourceY = ws->dataY(i); -for (size_t j = 0; j < m_nanIndexes[i].size(); ++j) +for (size_t j = 0; j < m_nanYIndexes[i].size(); ++j) { - sourceY[m_nanIndexes[i][j]] = std::numeric_limits<double>::quiet_NaN(); + sourceY[m_nanYIndexes[i][j]] = std::numeric_limits<double>::quiet_NaN(); } -size_t siz = m_infIndexes[i].size(); -for (size_t j = 0; j < m_infIndexes[i].size(); ++j) +for (size_t j = 0; j < m_infYIndexes[i].size(); ++j) { - sourceY[m_infIndexes[i][j]] = std::numeric_limits<double>::infinity(); + sourceY[m_infYIndexes[i][j]] = std::numeric_limits<double>::infinity(); } +for (size_t j = 0; j < m_nanEIndexes[i].size(); ++j) +{ + sourceY[m_nanEIndexes[i][j]] = std::numeric_limits<double>::quiet_NaN(); +} + +for (size_t j = 0; j < m_infEIndexes[i].size(); ++j) +{ + sourceY[m_infEIndexes[i][j]] = std::numeric_limits<double>::infinity(); +} + + PARALLEL_END_INTERUPT_REGION } PARALLEL_CHECK_INTERUPT_REGION -- GitLab