From b2632bae9f424183cdcd09076dd2d8da1ccd33f5 Mon Sep 17 00:00:00 2001 From: Pete Peterson <petersonpf@ornl.gov> Date: Tue, 27 Oct 2015 10:42:09 -0400 Subject: [PATCH] Protecting against NaN in TOF range --- Framework/Algorithms/src/ResampleX.cpp | 33 +++++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/Framework/Algorithms/src/ResampleX.cpp b/Framework/Algorithms/src/ResampleX.cpp index 78f2267942e..d3e8d0b520e 100644 --- a/Framework/Algorithms/src/ResampleX.cpp +++ b/Framework/Algorithms/src/ResampleX.cpp @@ -124,15 +124,35 @@ string determineXMinMax(MatrixWorkspace_sptr inputWS, vector<double> &xmins, stringstream msg; + // determine overall xmin/xmax + double xmin_wksp = inputWS->getXMin(); + double xmax_wksp = inputWS->getXMax(); + EventWorkspace_const_sptr inputEventWS = + boost::dynamic_pointer_cast<const EventWorkspace>(inputWS); + if (inputEventWS != NULL) { + xmin_wksp = inputEventWS->getTofMin(); + xmax_wksp = inputEventWS->getTofMax(); + } + size_t numSpectra = inputWS->getNumberHistograms(); for (size_t i = 0; i < numSpectra; ++i) { // determine ranges if necessary if (updateXMins || updateXMaxs) { const MantidVec &xvalues = inputWS->getSpectrum(i)->dataX(); - if (updateXMins) - xmins.push_back(xvalues.front()); - if (updateXMaxs) - xmaxs.push_back(xvalues.back()); + if (updateXMins) { + if (boost::math::isnan(xvalues.front())) { + xmins.push_back(xmin_wksp); + } else { + xmins.push_back(xvalues.front()); + } + } + if (updateXMaxs) { + if (boost::math::isnan(xvalues.back())) { + xmaxs.push_back(xmax_wksp); + } else { + xmaxs.push_back(xvalues.back()); + } + } } // error check the ranges @@ -304,7 +324,7 @@ void ResampleX::exec() { if (inPlace) { g_log.debug() << "Rebinning event workspace in place\n"; } else { - g_log.debug() << "Rebinning event workspace in place\n"; + g_log.debug() << "Rebinning event workspace out of place\n"; // copy the event workspace to a new EventWorkspace outputEventWS = boost::dynamic_pointer_cast<EventWorkspace>( @@ -336,7 +356,8 @@ void ResampleX::exec() { double delta = this->determineBinning(xValues, xmins[wkspIndex], xmaxs[wkspIndex]); g_log.debug() << "delta[wkspindex=" << wkspIndex << "] = " << delta - << "\n"; + << " xmin=" << xmins[wkspIndex] + << " xmax=" << xmaxs[wkspIndex] << "\n"; outputEventWS->getSpectrum(wkspIndex)->setX(xValues); prog.report(name()); // Report progress PARALLEL_END_INTERUPT_REGION -- GitLab