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