Skip to content

Commit

Permalink
Merge pull request #542 from mantidproject/11472_LoadNXSPE_bug
Browse files Browse the repository at this point in the history
LoadNXSPE fails to load some Mantid nxspe files
  • Loading branch information
abuts committed Apr 9, 2015
2 parents 7763cca + 18136f2 commit c44909c
Showing 1 changed file with 24 additions and 22 deletions.
46 changes: 24 additions & 22 deletions Code/Mantid/Framework/DataHandling/src/LoadNXSPE.cpp
Expand Up @@ -18,6 +18,7 @@
#include <string>
#include <vector>
#include <boost/regex.hpp>
#include <boost/math/special_functions/fpclassify.hpp>

namespace Mantid {
namespace DataHandling {
Expand Down Expand Up @@ -245,28 +246,6 @@ void LoadNXSPE::exec() {
outputWS->getAxis(0)->unit() = UnitFactory::Instance().create("DeltaE");
outputWS->setYUnit("SpectraNumber");

std::vector<double>::iterator itdata = data.begin(), iterror = error.begin(),
itdataend, iterrorend;
API::Progress prog = API::Progress(this, 0.0, 0.9, numSpectra);
for (std::size_t i = 0; i < numSpectra; ++i) {
itdataend = itdata + numBins;
iterrorend = iterror + numBins;
outputWS->dataX(i) = energies;
if (((*itdata) == std::numeric_limits<double>::quiet_NaN()) ||
(*itdata <= -1e10)) // masked bin
{
outputWS->dataY(i) = std::vector<double>(numBins, 0);
outputWS->dataE(i) = std::vector<double>(numBins, 0);
pmap.addBool(outputWS->getDetector(i).get(), "masked", true);
} else {
outputWS->dataY(i) = std::vector<double>(itdata, itdataend);
outputWS->dataE(i) = std::vector<double>(iterror, iterrorend);
}
itdata = (itdataend);
iterror = (iterrorend);
prog.report();
}

// add logs
outputWS->mutableRun().addLogData(
new PropertyWithValue<double>("Ei", fixed_energy));
Expand Down Expand Up @@ -311,6 +290,29 @@ void LoadNXSPE::exec() {
instrument->markAsDetector(det);
}

std::vector<double>::iterator itdata = data.begin(), iterror = error.begin(),
itdataend, iterrorend;
API::Progress prog = API::Progress(this, 0.0, 0.9, numSpectra);
for (std::size_t i = 0; i < numSpectra; ++i) {
itdataend = itdata + numBins;
iterrorend = iterror + numBins;
outputWS->dataX(i) = energies;
if ((!boost::math::isfinite(*itdata))||
(*itdata <= -1e10)) // masked bin
{
outputWS->dataY(i) = std::vector<double>(numBins, 0);
outputWS->dataE(i) = std::vector<double>(numBins, 0);
pmap.addBool(outputWS->getDetector(i).get(), "masked", true);
} else {
outputWS->dataY(i) = std::vector<double>(itdata, itdataend);
outputWS->dataE(i) = std::vector<double>(iterror, iterrorend);
}
itdata = (itdataend);
iterror = (iterrorend);
prog.report();
}


setProperty("OutputWorkspace", outputWS);
}

Expand Down

0 comments on commit c44909c

Please sign in to comment.