diff --git a/Framework/API/src/MatrixWorkspace.cpp b/Framework/API/src/MatrixWorkspace.cpp index f8982f0e92de66a78cb177ba73f1b6b5983a364f..b4523dfeeed4f810d77a9f83d536ac11bdee5ff3 100644 --- a/Framework/API/src/MatrixWorkspace.cpp +++ b/Framework/API/src/MatrixWorkspace.cpp @@ -1936,13 +1936,26 @@ MatrixWorkspace::findY(double value, const std::pair<int64_t, int64_t> &idx) const { std::pair<int64_t, int64_t> out(-1, -1); const int64_t numHists = static_cast<int64_t>(this->getNumberHistograms()); - for (int64_t i = idx.first; i < numHists; ++i) { - const auto &Y = this->y(i); - // cppcheck-suppress syntaxError - if (auto it = std::find(std::next(Y.begin(), idx.second), Y.end(), value); - it != Y.end()) { - out = {i, std::distance(Y.begin(), it)}; - break; + if (std::isnan(value)) { + for (int64_t i = idx.first; i < numHists; ++i) { + const auto &Y = this->y(i); + // cppcheck-suppress syntaxError + if (auto it = std::find_if(std::next(Y.begin(), idx.second), Y.end(), + [](double v) { return std::isnan(v); }); + it != Y.end()) { + out = {i, std::distance(Y.begin(), it)}; + break; + } + } + } else { + for (int64_t i = idx.first; i < numHists; ++i) { + const auto &Y = this->y(i); + // cppcheck-suppress syntaxError + if (auto it = std::find(std::next(Y.begin(), idx.second), Y.end(), value); + it != Y.end()) { + out = {i, std::distance(Y.begin(), it)}; + break; + } } } return out; diff --git a/Framework/API/test/MatrixWorkspaceTest.h b/Framework/API/test/MatrixWorkspaceTest.h index 73e0c895f621b8c9afba82ed2614c64a86ead2f2..f616f06788668414ece903fb53449167f9606d97 100644 --- a/Framework/API/test/MatrixWorkspaceTest.h +++ b/Framework/API/test/MatrixWorkspaceTest.h @@ -2059,6 +2059,10 @@ public: idx = ws->findY(2., {1, 1}); TS_ASSERT_EQUALS(idx.first, 1); TS_ASSERT_EQUALS(idx.second, 1); + ws->mutableY(1) = NAN; + idx = ws->findY(NAN, {0, 0}); + TS_ASSERT_EQUALS(idx.first,1); + TS_ASSERT_EQUALS(idx.second,0); } private: